¿Por qué es esta salida a la espera de algo después de ella?
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?
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:
- impulso :: hilo :: sueño () - milisegundo granularidad
- alarmas (1 segundo granularidad)
- select ()
- pthread_cond_timedwait ()
etc.