我有一个包含几个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语句之后,程序执行很少挂起.我错过了一些明显的事吗?我应该sys.stdout.flush()
在Python代码中调用吗?不幸的是,我无法提供更多代码,因为我的程序包含数十个类.
[编辑]我挂了一个调试器时暂停了程序,没有可用的源显示.调用堆栈是:
似乎线程正在等待.但是,我自己没有设置这些线程.它们要么是由Cuda生成的,要么是我正在使用的Havok物理引擎.我会调查.