Требуется лучшее решение для ожидания
Недавно я писал программу на С++, которая пингует три разных веб-сайта, а затем в зависимости от прохода или сбоя она будет ждать 5 минут или 30 секунд, прежде чем она снова попытается.
В настоящее время я использую библиотеку ctime и следующую функцию для обработки моего ожидания, однако, согласно моему процессору, это неприемлемое решение.
void wait (int seconds)
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC;
while (clock () < endwait) {}
}
Причина, по которой это решение неприемлемо, заключается в том, что, согласно моему счетчику, программа работает от 48% до 50% моего процессора при ожидании. У меня процессор Athlon 64 x2 1.2ghz. Нет никакой возможности, чтобы моя скромная 130-линейная программа даже приблизилась к 50%.
То, что я прошу узнать, - как я могу лучше написать функцию ожидания, чтобы использовать только минимальные ресурсы? Спасибо.
Ответы
Ответ 1
Чтобы оставаться портативным, вы можете использовать Boost:: Thread для сна:
#include <boost/thread/thread.hpp>
int main()
{
//waits 2 seconds
boost::this_thread::sleep( boost::posix_time::seconds(1) );
boost::this_thread::sleep( boost::posix_time::milliseconds(1000) );
return 0;
}
Ответ 2
В стандарте С++ 11 можно использовать следующий подход:
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::this_thread::sleep_for(std::chrono::seconds(100));
В качестве альтернативы можно использовать sleep_until
.
Ответ 3
Используйте sleep, а не пустой цикл while.
Ответ 4
Просто, чтобы объяснить, что происходит: когда вы вызываете clock(), ваша программа снова получает время: вы просите его сделать это как можно быстрее, пока не достигнет конечного времени..., что оставляет ядро процессора, запускающее программа "вращается" так быстро, как только может, через ваш цикл, прочитывая время миллионы раз в секунду в надежде, что она перевернется до конца. Вам нужно вместо этого сообщить операционной системе, что вы хотите, чтобы вас разбудили после интервала... тогда они могут приостановить вашу программу и позволить другим программам работать (или система бездействует)... что различные функции сна, упомянутые в других ответы для.
Ответ 5
Там сон в windows.h, на * nix спать в unistd.h.
Там более элегантное решение @http://www.faqs.org/faqs/unix-faq/faq/part4/section-6.html