Необходимо реализовать класс 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 месяца назад я тоже сталкивался с подобной необходимостью. Решил вопрос используя аппаратные таймеры.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Недавно начал програмировать на с++ и возник вопросНаписал программу которая показывает список учеников и их оценки
Как создать enum который будет доступен везде? Я вот например создал enum и с ним все нормально работает в классах где создаю а вот в класе наследнике...
Есть строка с датой и времнем в определенном формате