如何(安全地)中断单独线程上的计算?

时间:2017-06-26 07:38:38

标签: c++ multithreading winapi mfc thread-safety

我有一个程序,它使用第三方库进行一些计算,我在主应用程序的一个单独的线程上启动。 不幸的是,这种计算可能需要很长时间,并且不会为进度更新和取消提供接口。

为了拥有这样的界面,我想创建一个"取消"应立即终止计算的按钮(并删除所有结果)。

我需要一些帮助(-code snipped升级),以及如何进行最佳设置和干净执行。它是否安全'做到了吗?

我目前正在使用AfxBeginThread()启动此流程。

2 个答案:

答案 0 :(得分:4)

销毁(或暂停)未运行代码的线程是破坏程序的一种练习。

如果线程中有代码

"PYTHONPATH=$(pwd)/.."

然后资源cs将被销毁(或暂停的线程)永久拥有。当其他地方需要资源时,这将会死锁。

如果线程正在创建其他资源,如文件,共享内存,这些也可能会泄露,从而增加程序的不稳定性。

如果线程有取消回叫,则应使用此选项。我还尝试了错误注入的形式,当线程要求数据时,这些最终“测试”第三方代码,使其执行未经测试和错误的路径。

与供应商交谈并要求取消方法,或寻找替代方案。

答案 1 :(得分:2)

我建议生成一个子进程来执行这些长计算。与线程不同,可以终止进程而不会对主应用程序产生负面影响。这种方法还可以在第三方代码出现严重错误的情况下保护主应用程序,例如访问冲突,否则会导致其终止。