Нужно лучшее решение для ожидания
Вопрос
Недавно я писал программу на C ++, которая выполняет пинг трех разных веб-сайтов, а затем, в зависимости от прохождения или сбоя, она будет ждать 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,2 ГГц.Моя скромная программа из 130 строк ни за что не приблизится к 50%.
Как я могу лучше написать свою функцию ожидания, чтобы она использовала только минимальные ресурсы?
Решение
Чтобы оставаться портативным, вы можете использовать Boost :: Тема Для сна:
#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;
}
Другие советы
С стандартным стандартом C ++ можно использовать следующий подход:
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::this_thread::sleep_for(std::chrono::seconds(100));
В качестве альтернативы sleep_until
может быть использован.
Использовать спать а не пустой, пока цикла.
Просто чтобы объяснить, что происходит:когда вы вызываете clock (), ваша программа снова возвращает время:вы просите его сделать это как можно быстрее, пока он не достигнет конечного времени...это оставляет ядро процессора, выполняющее программу, "вращающейся" со всей возможной скоростью в вашем цикле, считывая время миллионы раз в секунду в надежде, что оно завершится.Вместо этого вам нужно сообщить операционной системе, что вы хотите, чтобы вас разбудили через определенный промежуток времени...затем они могут приостановить вашу программу и позволить другим программам работать (или системе бездействовать)...вот для чего предназначены различные функции сна, упомянутые в других ответах.
В Windows есть сон.
Есть более элегантное решение @ http://www.faqs.org/faqs/unix-faq/faq/part4/section-6.html