2011-02-16 3 views
3

Je veux calculer le temps d'une boucle qu'il faut pour terminer.étrange comportement de cout << Boost :: posix_time

je fais quelque chose comme:

ptime before = second_clock::local_time(); //get current time 
cout << "Started: "<< before << " ... processing ..."; 
while(foo) { 
.... 
} 
ptime after = second_clock::local_time(); // get Current time 
cout << "Processing took" << after - before; 

Affichera: Commencé « un certain temps »

puis-je attendre la boucle pour terminer avant que je voir "... .. traitement "

Pourquoi est-ce? Il devrait d'abord décortiquer tout le texte et ensuite entrer dans la boucle.

Si je change le premier à Cout:

Cout < < "Commencé" < < avant;

Il ne me montre même pas le temps avant la fin de la boucle.

C'est la chose la plus étrange que j'ai jamais vue ... il semble qu'il y ait quelque chose qui ne va pas dans ma compréhension du temps de boost. J'utilise aussi boost :: threads dans mon code mais les workers sont spwaned dans la boucle donc je ne vois pas comment cela pourrait avoir à faire avec ce problème.

Quelqu'un peut-il m'aider ici?

Répondre

2

ostream s, y compris cout utiliser des tampons, ce qui signifie que l'implémentation peut attendre de voir si vous allez envoyer plus de données avant d'agir réellement sur lui.

Pour cout d'imprimer plus rapidement, utilisez

std::cout << std::flush; 

ou utiliser std::endl, ce qui équivaut à "\n" suivie std::flush.

+0

Super, maintenant c'est clair, merci beaucoup! – Daniel

Questions connexes