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?

È stato utile?

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:

  1. boost :: :: filo sleep () - millisecondo granularità
  2. allarmi (1 secondo granularità)
  3. Seleziona ()
  4. pthread_cond_timedwait ()

ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top