¿Puede implementar un temporizador sin "suspensión" usando solo c ++ / c ++ 11 estándar?

Tengo el siguiente código (copiado a mano):

// 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;
    })
}

No quería enredarme demasiado en los detalles de la clase que escribo, así que esta es una versión muy reducida. La clase completa llama a una función de devolución de llamada y tiene una variable para cancelar el temporizador, etc ...

Solo quería centrarme en la parte del "sueño". ¿Puedo implementar algo como esto sin dormir o hay una mejor manera de hacerlo? ¿O duerme perfectamente bien? - Era de la opinión de que los sueños generalmente son un signo de mal diseño (lo he leído en algunos lugares) ... pero no se me ocurre una manera de implementar un temporizador sin uno:

Nota adicional El temporizador debe tener el requisito de poder detenerse / despertarse en cualquier momento. Solo agrego eso para mayor claridad porque parece afectar qué tipo de solución elegir. En mi código original (no este fragmento) utilicé un indicador de bool atómico que puede salir del bucle.

Respuestas a la pregunta(3)

Su respuesta a la pregunta