Я убрал свое понижение 8 часов назад после твоего редактирования. Я не проголосовал за него, потому что я не думаю, что это хороший качественный ответ: он запутан, у него много несвязанных разделов, и неясно, что или где на самом деле есть ответ. Я бы посоветовал обрезать большую часть и очистить макет.
я есть следующий код (от руки):
// Simple stop watch class basically takes "now" as the start time and
// returns the diff when asked for.
class stop_watch {...}
// global var
std::thread timer_thread;
void start_timer(int timeout_ms)
{
timer_thread = std::thread([timeout_ms, this](){
stop_watch sw;
while (sw.get_elapsed_time() < timeout_ms)
{
// Here is the sleep to stop from hammering a CPU
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
// Do timeout things here...
std::cout << "timed out!" << std::endl;
})
}
Я не хотел слишком увязать в деталях написанного мною класса, так что это очень урезанная версия. Полный класс вызывает функцию обратного вызова и имеет переменную для отмены таймера и т. Д.
Я просто хотел сосредоточиться на части «сна». Можно ли реализовать что-то подобное без сна или есть лучший способ сделать это? - или спать хорошо? - Я придерживался мнения, что сны, как правило, являются признаком плохого дизайна (я читал это в нескольких местах) ... но я не могу придумать, как реализовать таймер без него :(
Дополнительное примечание: Таймер должен иметь требование, чтобы его можно было остановить / разбудить в любое время. Просто добавьте это для ясности, потому что это, кажется, влияет на то, какое решение пойти. В моем исходном коде (не в этом фрагменте) я использовал атомарный флаг bool, который может выйти из цикла.