Pregunta

void Wait(double Duration)
{
    clock_t End;
    End = clock() + (Duration*CLOCKS_PER_SEC);

    while (clock() < End)
    {
        // This loop just stalls the program.
    }
}

Mi función funciona a la perfección la mitad del tiempo, pero de vez en cuando atasca el programa antes de que incluso se llama. Por ejemplo, tome el siguiente fragmento:

cout << "This is\n";
Wait(2.5)
cout << "a test!";

Lo que espera la primera línea que aparezca inmediatamente y la segunda línea que aparezca después de 2,5 segundos, pero parece que a veces todo después de 2,5 segundos. Cuál es el problema?

¿Fue útil?

Solución

try

cout.flush();

antes de su espera

Otros consejos

Esto puede ser debido a buffer de E / S. Usted debe vaciar el búfer de salida (ya sea tratar << endl en lugar de '\n' o escribir cout.flush) manualmente.

Trate cout << "This is" << endl;

Se ve como un tampón, no tema reloj.

El flush () / std :: endl ya se ha mencionado - pero es realmente su intención de consumir el 100% de un núcleo mientras espera? Esto es lo que el bucle while() está haciendo! Si desea un enfoque más agradable de "espera", considere uno de los siguientes:

  1. impulso :: hilo :: sueño () - milisegundo granularidad
  2. alarmas (1 segundo granularidad)
  3. select ()
  4. pthread_cond_timedwait ()

etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top