Re: шедулер
От: rus blood Россия  
Дата: 15.04.10 09:21
Оценка: 20 (1) +1
Здравствуйте, astlin, Вы писали:

A>Я вижу грубое решение наподобие:

A>
A>    int time_left = N;  // период в секундах
A>    for (;;) {
A>      Thread::sleep(time_left*1000);  // Засыпаем до следующего периода
A>      Timestamp starting_time;   // Время запуска задачи
A>      RunTask();
A>      Timestamp ending_time;     // Время окончания задачи
A>      int diff = ending_time - starting_time;  // время выполнения в микросекундах
A>      time_left = N * 1000 - diff / 1000;  // Вычисляем время спячки
A>    }
A>

A> Но смущают возникшие задачи по корректировке времени. Вопрос: есть ли более точный и изящный путь запускать задачу каждые N секунд без сдвигов и т.п.?

Так ты быстро накопишь ошибку...
Точнее будет привязываться к определенным моментам времени

int nexttime = time() + N;
for (;;)
{
    Thread::sleep(nexttime - time());
    RunTask();
    nexttime += N;
}
Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.