线程在无限循环中创建进程

时间:2013-12-10 12:07:47

标签: c++ windows multithreading qt ffmpeg

在我的应用程序中,一个线程在其中(1){}运行,因此当我的应用程序被用户终止时线程终止。

这样做是否安全?我正在使用while(1){}因为我的应用程序持续监视系统上的设备。

经过一段时间后,我在ffmpeg上得到“(R6016)没有足够的空间用于线程数据。”

我读过这篇文章,但没有解决我的问题:

http://support.microsoft.com/kb/126709

线程描述: 线程使用ffmpeg和handle实用程序(http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx)。在while(1){}循环中。

ffmpeg和handle正在通过QProcess运行,我将在进程结束后删除它。

while(1){}循环使用等待5秒     msleep(5000)。

1 个答案:

答案 0 :(得分:3)

这不安全。

while (1)更改为while (!stopCondition)并在退出时将stopCondition更改为TRUE。主线程应该在退出之前等待所有其他线程完成。

注意:stopCondition定义为volatile int stopCondition

当主线程存在时,清理过程开始:   - 称为全局析构函数(C ++)。   - C运行时库开始关闭,释放所有分配有malloc的内存,卸载动态库和其他资源。

依赖于C运行时正在运行的线程将崩溃,或者它是否从共享/动态库中运行代码。如果该线程正在执行某些重要操作(如写入文件),则该文件将损坏。也许在你的情况下事情并没有那么糟糕,但看到应用程序崩溃似乎并不好说。

这不是完整的故事,但我认为这是我的观点。