2011-02-16 60 views
3

我想計算完成所需的循環時間。cout的奇怪行爲<< Boost :: posix_time

我做這樣的事情:

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; 

這將輸出:開始:「一段時間」

然後我等待循環結束之前,我能看到「... ..處理。「

這是爲什麼?它應該首先關注整個文本,然後進入循環。

如果我改變第一COUT到:

COUT < < 「開始:」 < <前;

它甚至沒有告訴我循環結束前的時間。

這是我見過的最奇怪的東西......看起來我的理解提升時間出了問題。

我在我的代碼中也使用了boost :: threads,但工作人員在循環內spwaned,所以我不明白這可能與這個問題有關。

有人可以幫我嗎?

回答

2

ostream s包括cout使用緩衝區,這意味着實現可以等待,看看您是否會在實際作用之前發送更多數據。

要獲得cout打印更快,使用

std::cout << std::flush; 

或使用std::endl,這相當於"\n"隨後std::flush

+0

很好,現在很清楚,thx很棒! – Daniel 2011-02-16 13:33:12