Perché questa uscita in attesa di qualcosa dopo?
Domanda
void Wait(double Duration)
{
clock_t End;
End = clock() + (Duration*CLOCKS_PER_SEC);
while (clock() < End)
{
// This loop just stalls the program.
}
}
La mia funzione funziona perfettamente la metà del tempo, ma bancarelle di tanto in tanto il programma prima che sia ancora chiamato. Per esempio, prendete il seguente frammento:
cout << "This is\n";
Wait(2.5)
cout << "a test!";
che ci si aspetta la prima linea di apparire immediatamente e la seconda linea di apparire dopo 2,5 secondi, ma sembra a volte tutto dopo 2,5 secondi. Qual è il problema?
Soluzione
try
cout.flush();
prima della Wait
Altri suggerimenti
Questo potrebbe essere a causa di buffer di I / O.
Si dovrebbe svuotare il buffer di uscita (o provare << endl
invece di '\n'
o scrivere cout.flush
) manualmente.
Prova cout << "This is" << endl;
Si presenta come un buffer, non è questione di clock.
Il flush () / std :: endl è già stato detto - ma è la vostra intenzione di consumare davvero il 100% di un core, mentre si attende? Questo è ciò che il ciclo while()
sta facendo! Se si desidera un approccio più bello di "attesa", prendere in considerazione una delle seguenti opzioni:
- boost :: :: filo sleep () - millisecondo granularità
- allarmi (1 secondo granularità)
- Seleziona ()
- pthread_cond_timedwait ()
ecc.