OS X线程间通信问题

3

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

3个回答

5

有几种方法可以实现这一点,按复杂度排序(从简单到复杂):

  • 使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:方法,这个方法很容易理解。
  • 使用performSelector:onThread:withObject:waitUntilDone:方法,可以让你反过来。
  • 使用NSNotification(和NSDistributedNotificationCenter),但如果不小心可能会遇到竞态条件。
  • 使用NSPorts来发送数据。

详细信息请查看Abizer提到的文档。


NSNotifcation会在它们被发布的线程上发送,所以这并没有什么帮助。但是可以在线程之间使用分布式通知。 - Dave Dribin

1

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

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


0

看看这个苹果文档。

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

多线程Cocoa程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接