Необходимо реализовать класс time line, который будет отсчитывать время через заданный ему интервал. Как лучше это сделать?
1 вариант.
void TimeLine::StartInThread()
{
while(!this->stopped)
{
std::this_thread::sleep_for(this->interval);
this->timestamp++;
}
}
2 вариант.
void TimeLine::StartInThread()
{
while(!this->stopped)
{
if(this->cur_timestamp - this->save_timestamp > this->interval)
{
this->save_timestamp = this->cur_timestamp;
this->timestamp++;
}
}
}
Гарантирует ли 1 вариант, что sleep будет на просыпаться вовремя, например, каждые 25 миллисекунд? Как я понимаю второй вариант будет затрачивать больше процессорного времени.
Если у вас не система реального времени (системы linux и windows таковыми не являются) то первый вариант всегда будет срабатывать чуть позже, а если нагрузка на систему большая то значительно позже. Да, второй вариант будет нехило грузить одно из ядер.
4 месяца назад я тоже сталкивался с подобной необходимостью. Решил вопрос используя аппаратные таймеры.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей