在删除对象后退出包含指向对象的指针的线程的最佳方法

use*_*711 0 c++ multithreading

在我的c ++类中,我创建一个线程并给出指向this该线程的指针.现在某个地方这个对象被删除了.我希望线程在删除对象后退出.

一种方法是使用try-catch.每当我发现异常时,我都退出线程.但这就是一种黑客攻击.

In *_*ico 6

现在某个地方这个对象被删除了.我希望线程在删除对象后退出.

这完全是倒退.你想要做的是发出线程信号以某种方式退出并让线程清理对象本身.换句话说,"主"线程和"工作"线程之间必须存在某种协作.

这是因为线程本身可能希望在退出之前能够对该对象执行某些操作,如果删除它然后导致该线程退出,则您的程序几乎肯定会死于访问冲突异常.

考虑使用boost::thread,它内置支持协作线程取消.线程将定期检查何时使用其中一个中断点退出,执行任何必要的清理.这样,"主"线程不必处理删除对象本身,它只能通知线程退出,它将自己处理(假设您正确实现).