Я убрал свое понижение 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, который может выйти из цикла.

Ответы на вопрос(3)

Ваш ответ на вопрос