在我的c ++类中,我创建一个线程并将指针this
提供给线程。现在某个地方这个对象被删除了。我希望线程在删除对象后退出。
一种方法是使用try-catch。每当我发现异常时,我都退出线程。但这有点像黑客。
答案 0 :(得分:6)
现在这个对象被删除了。我想要线程 删除对象后退出。
这完全是倒退。你想要做的是发出线程信号以某种方式退出并让线程清理对象本身。换句话说,“主”线程和“工作者”线程之间必须有某种合作。
这是因为线程本身可能希望在退出之前能够对该对象执行某些操作,如果您将其删除然后导致该线程退出,您的程序几乎肯定会死于访问违规例外。
考虑使用boost::thread
,它内置支持协作线程取消。该线程将定期检查何时使用interruption points之一退出,执行任何必要的清理。这样,“主”线程不必处理删除对象本身,它只能通知线程退出,并且它将自行处理(假设您正确实现了这一点)。
答案 1 :(得分:0)
我会将它包装在一个包含this指针的结构中,并用某种标志来报告该对象是否被删除。这样你至少可以避免异常代码。
答案 2 :(得分:0)
您可以在析构函数中停止线程。