2

我调用了一个第三方 C++ 库,该库已放入它自己的线程(当前使用 NSThread)。我想让用户能够停止执行该线程。(我很清楚这可能导致的所有问题,但我仍然希望这样做。)

根据Apple 的 Thread Programming Guide,Cocoa 有可能这样做。iPhone 也是如此,还是我必须依靠 Posix 线程来实现我的目标?

干杯

法师先生

4

1 回答 1

11

停止线程执行的正确方法是很好地要求它停止执行。然后,在您的线程中,您听取此类请求并在适当的时间服从它们。

正如您链接到的页面所说:

尽管 Cocoa、POSIX 和 Multiprocessing Services 提供了直接杀死线程的例程,但强烈建议不要使用此类例程。杀死一个线程可以防止该线程自行清理。线程分配的内存可能会泄漏,并且线程当前使用的任何其他资源可能无法正确清理,从而在以后产生潜在问题。

如果您预计需要在操作中间终止线程,则应从一开始就设计线程以响应取消或退出消息。对于长时间运行的操作,这可能意味着定期停止工作并检查是否有此类消息到达。如果确实有消息要求线程退出,那么线程将有机会执行任何需要的清理并优雅地退出;否则,它可以简单地返回工作并处理下一个数据块。

于 2009-08-29T18:12:56.520 回答