2011-02-16 113 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