Вопрос

Недавно я писал программу на 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top