小编Ben*_*nie的帖子

C++输出流未使用endl和执行暂停进行刷新

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

这是一个小代码片段:

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

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

    // Computations and more print statements.
}
Run Code Online (Sandbox Code Playgroud)

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

[编辑]我挂了一个调试器时暂停了程序,没有可用的源显示.调用堆栈是: 在此输入图像描述

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

c++ python outputstream flush endl

5
推荐指数
0
解决办法
223
查看次数

标签 统计

c++ ×1

endl ×1

flush ×1

outputstream ×1

python ×1