0

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

一种方法是使用 try-catch。每当我发现异常时,我都会退出线程。但那是一种黑客行为。

4

3 回答 3

6

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

这完全是倒退。您想要做的是以某种方式通知线程退出并让线程清理对象本身。换句话说,“主”线程和“工作”线程之间必须有某种合作。

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

考虑使用boost::thread,它具有对协作线程取消的内置支持。该线程将使用中断点之一定期检查何时该退出,执行任何必要的清理。这样,“主”线程不必处理删除对象本身,它可以只发出线程退出的信号,它会自行处理(假设您正确实现了这一点)。

于 2012-10-09T06:31:29.813 回答
0

我会将它包装在一个包含 this 指针和某种标志的结构中,以报告对象是否被删除。这样你至少可以避免异常代码。

于 2012-10-09T06:29:48.143 回答
0

您可以在析构函数中停止线程。

于 2012-10-09T06:31:48.860 回答