Cocoa OSX线程间通信问题

Cocoa OSX线程间通信问题,cocoa,multithreading,macos,Cocoa,Multithreading,Macos,我正在Cocoa中开发一个多线程应用程序。主线程从用户获取值,当单击按钮时,我调用一个进行长时间计算的辅助线程。现在,从这个线程,我必须将计算的每个步骤的输出返回到主线程。我希望定期将数据从一个线程发送到另一个线程。我找不到任何简单的例子可以做到这一点。有什么想法吗?看看苹果的文档 您可能需要创建ADC成员帐户,但这是免费的 有很多方法可以做到这一点,按照复杂程度的大致顺序(最简单的优先顺序): 使用NSObject的performSelectorOnMainThread:withObject

我正在Cocoa中开发一个多线程应用程序。主线程从用户获取值,当单击按钮时,我调用一个进行长时间计算的辅助线程。现在,从这个线程,我必须将计算的每个步骤的输出返回到主线程。我希望定期将数据从一个线程发送到另一个线程。我找不到任何简单的例子可以做到这一点。有什么想法吗?

看看苹果的文档

您可能需要创建ADC成员帐户,但这是免费的


有很多方法可以做到这一点,按照复杂程度的大致顺序(最简单的优先顺序):

  • 使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:这是非常不言自明的
  • 使用performSelector:onThread:withObject:waitUntilDone:,这会让您走另一条路
  • 使用NSNotification(和NSDistributedNotificationCenter),但如果不小心的话,您很容易陷入竞争状态
  • 使用NSPORT来回发送数据

查看Abizer提到的文档,了解所有这些的详细信息

performSelectorOnMainThread:withObject:waitUntilDone:
通常是使用后台线程进度更新UI的最简单方法。您还可以创建自己的存储区域,使用NSLock或类似机制在线程之间安全访问,甚至可以使用分布式对象(也可以在进程之间或网络上工作)


还有NSOperationQueue和NSOperation,它们确实有助于简化多线程编程,尽管许多程序员一直在避免使用它,因为在Leopard下的某些情况下,它会导致崩溃。

NSNotification是在发布的线程上发送的,所以这并没有真正的帮助。不过,可以在线程之间使用分布式通知。