Здравствуйте, 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;
}