C ++输出流未使用endl刷新并且执行暂停

时间:2015-12-16 05:52:54

标签: python c++ outputstream flush endl

我有一个包含多个cout语句的C ++程序。我确保所有这些都以endl结尾。我的问题是程序很少停止,直到用户按下Enter(所以我假设输出缓冲区并不总是按照它应该刷新)。按Enter键恢复程序执行。这是非常有问题的,因为我的程序需要几个小时才能执行,因此我无法一直按下输入!请注意,有时程序会在一分钟后停止,有时会在一个多小时后停止。

这是一个小代码片段:

for(int i = 0; i < _numIterations; i++){

    std::cout << "Iteration " << i << std::endl;

    // Computations and more print statements.
}

请注意,我通过嵌入Python使用Theano,我的Python代码也包含print语句。我的Python代码只在每次打印后调用print而不是sys.stdout.flush()。但是,在Python生成的print语句之后,程序执行很少挂起。我错过了明显的东西吗?我应该在Python代码中调用sys.stdout.flush()吗?不幸的是,我无法提供更多代码,因为我的程序包含数十个类。

[编辑]我在调试程序挂起时暂停了程序,并且没有可用的源显示。调用堆栈是: enter image description here

似乎线程正在等待。但是,我自己没有设置这些线程。它们要么是由Cuda生成的,要么是我正在使用的Havok物理引擎。我会调查。

0 个答案:

没有答案