2014-09-19 1 views
-2

En C++ j'utilise usleep dans mon chemin "principal" et appelle la fonction out avant.sommeil et usleep commencent mal

out(); 
usleep(4000000); 

out imprime quelque chose sur l'écran. Malheureusement, l'impression n'apparaît sur l'écran qu'après 4 secondes, bien que l'appel de la fonction out() soit avant la commande usleep. Je travaille sur une framboise avec du raspbian. Comment peut-il être que pas d'abord la fonction out(); est appelé et puis usleep commence mais l'inverse?

+2

Il serait utile de savoir ce que 'out()' fait. – Galik

+4

Vous devez probablement vider votre tampon de sortie dans 'out()'. –

Répondre

3

En C++, pour réduire le temps d'E/S, nous avons une sortie tamponnée. Cela signifie que les appels qui écrivent sur l'écran/le disque n'écrivent pas toujours sur le périphérique réel.

Prenons par exemple ce code:

for (int x = 0; x < 10000; x++) 
    std::cout << "a"; 

Si « a » serait écrit à l'écran chaque fois, il prendrait beaucoup de temps. Au lieu de cela, le tampon entier est écrit tous les n caractères.

Pour écrire le tampon non complet à l'écran vous avez plusieurs options:

Utilisez std :: flush comme ceci:

std::cout << std::flush; 

Std :: endl utilise également flush:

std::cout << std::endl; 
+0

super, ça marche, merci beaucoup :-) J'ai le même problème avec la commande outfile.write (buffer, 10); Y at-il quelque chose comme flush pour cela aussi? –

+0

'outfile.sync()' –

+0

J'ai découvert qu'il fonctionne de la même façon avec le flush, merci beaucoup j'ai essayé cela seul pendant des heures ... :-) !! Voici comment cela fonctionne: Au lieu de outfile.write (buffer, 10) j'utilise: string buffer = "test"; outfile << buffer << flush; –