在我的应用程序中,一个线程在其中(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)。
答案 0 :(得分:3)
这不安全。
将while (1)
更改为while (!stopCondition)
并在退出时将stopCondition更改为TRUE。主线程应该在退出之前等待所有其他线程完成。
注意:stopCondition
定义为volatile int stopCondition
。
当主线程存在时,清理过程开始:
- 称为全局析构函数(C ++)。
- C运行时库开始关闭,释放所有分配有malloc
的内存,卸载动态库和其他资源。
依赖于C运行时正在运行的线程将崩溃,或者它是否从共享/动态库中运行代码。如果该线程正在执行某些重要操作(如写入文件),则该文件将损坏。也许在你的情况下事情并没有那么糟糕,但看到应用程序崩溃似乎并不好说。
这不是完整的故事,但我认为这是我的观点。