停止MFC线程

时间:2009-12-16 16:13:41

标签: c++ mfc multithreading

我理解直接杀死线程的问题(通过AfxEndThread或其他方法),我已经看到使用CEvent对象的示例来通知线程,然后让线程自行清理。我遇到的问题是使用CEvent来通知线程似乎需要一个循环,您可以检查循环结束时是否发出信号。问题是,我的线程没有循环。它只是运行,处理可能需要一段时间(这就是为什么我希望能够阻止它)。

另外,如果我要杀死线程,我意识到我分配的任何东西都没有机会清理它自己。在我看来,像我一直在使用的任何本地人碰巧把东西放在堆上也无法清理自己。是这种情况吗?

3 个答案:

答案 0 :(得分:2)

这里没有秘密的魔法知识。

只需在功能代码中定期检查事件对象,您认为可以安全退出。

答案 1 :(得分:0)

本地人将被放置在堆栈上,因此,在释放线程时我会被释放(我认为)。虽然析构函数不会被调用,但线程所持有的任何关键部分都不会被释放。

如果线程只在堆栈上处理简单数据类型,那么这样做是安全的。

答案 2 :(得分:0)

你的线程是否会退出?如果是这样,您可以在退出时在线程中设置一个事件,并让主进程通过waitforsingleevent等待该事件。这最好是使用超时,因此主进程在关闭时似乎不会锁定。在超时事件中,通过AfxKillThread终止线程。但是,您必须确定合理的超时时间。

由于你没有在线程中循环,所以在我看来这是唯一的方法。当然,你可能会在主进程中设置一个布尔标志并让线程定期检查这个标志,但是你的线程代码将会被“if(!canRun)return”所包含。类型代码。

如果线程永不退出,则AfxKillThread / AfxTerminateThread是停止线程的唯一方法。