std:: flush
|
Défini dans l'en-tête
<ostream>
|
||
|
template
<
class
CharT,
class
Traits
>
std:: basic_ostream < CharT, Traits > & flush ( std:: basic_ostream < CharT, Traits > & os ) ; |
||
Vide la séquence de sortie os comme si en appelant os. flush ( ) .
Ceci est un manipulateur d'E/S en sortie uniquement, il peut être appelé avec une expression telle que
out
<<
std
::
flush
pour tout
out
de type
std::basic_ostream
.
Table des matières |
Notes
Ce manipulateur peut être utilisé pour produire immédiatement une ligne de sortie incomplète, par exemple lors de l'affichage de la sortie d'un processus de longue durée, de la journalisation de l'activité de multiples threads ou de la journalisation de l'activité d'un programme susceptible de planter de manière inattendue. Un vidage explicite de std::cout est également nécessaire avant un appel à std::system , si le processus créé effectue toute opération d'E/S d'écran (un exemple courant est std:: system ( "pause" ) sous Windows). Dans la plupart des autres scénarios interactifs d'E/S habituels, std::endl est redondant lorsqu'il est utilisé avec std::cout car toute entrée depuis std::cin , sortie vers std::cerr , ou terminaison du programme force un appel à std:: cout . flush ( ) .
Lorsqu'une ligne complète de sortie doit être vidée, le std::endl manipulateur peut être utilisé.
Lorsque chaque opération de sortie doit être vidée, le manipulateur std::unitbuf peut être utilisé.
Paramètres
| os | - | référence au flux de sortie |
Valeur de retour
os (référence au flux après manipulation).
Exemple
Sans
std::flush
, la sortie serait la même, mais pourrait ne pas apparaître en temps réel.
#include <chrono> #include <iostream> template<typename Diff> void log_progress(Diff d) { std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(d) << " ... " << std::flush; } int main() { volatile int sink = 0; auto t1 = std::chrono::high_resolution_clock::now(); for (int j = 0; j < 5; ++j) { for (int n = 0; n < 10000; ++n) for (int m = 0; m < 20000; ++m) sink += m * n; // do some work auto now = std::chrono::high_resolution_clock::now(); log_progress(now - t1); } std::cout << '\n'; }
Sortie possible :
567ms ... 1137ms ... 1707ms ... 2269ms ... 2842ms ...
Voir aussi
|
contrôle si la sortie est vidée après chaque opération
(fonction) |
|
|
affiche
'
\n
'
et vide le flux de sortie
(modèle de fonction) |
|
|
se synchronise avec le dispositif de stockage sous-jacent
(fonction membre publique de
std::basic_ostream<CharT,Traits>
)
|