关闭多线程NSDocument

时间:2010-02-22 20:11:35

标签: c++ objective-c cocoa multithreading nsdocument

我有一个基于NSDocument的Cocoa应用程序,我有几个辅助线程,当用户关闭文档窗口或应用程序退出时,我需要优雅地终止(等待它们在当前循环中运行)。我正在使用canCloseDocumentWithDelegate在文档关闭时向线程发送一个标志,然后当它们完成时,其中一个调用[NSDocument close]。当用户关闭文档窗口时,这似乎非常敏锐,但是当您退出应用程序时,它会出现各种错误(在它调用任何内容之前崩溃)。对于这样的事情,正确的程序是什么?

1 个答案:

答案 0 :(得分:4)

最好的方法是让线程拥有线程完成所做任何操作所必需的对象,以便能够中止处理并尽快终止。

在非GC下,这意味着线程-retain完成时-release。对于GC,它只是对所需对象的硬参考。

如果在文档关闭之前必须继续并且必须完成某种冗长的处理,请删除带有进度条的工作表并保留文档模态直到完成(Aperture和iPhoto都是这样做的。)