OS X线程间通信问题

时间:2008-12-08 10:47:17

标签: cocoa multithreading macos

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

3 个答案:

答案 0 :(得分:5)

有许多方法可以做到这一点,按照复杂程度的粗略顺序(最简单的第一个):

  • 使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:这是非常自我解释的。
  • 使用performSelector:onThread:withObject:waitUntilDone:,这将让你走另一条路
  • 使用NSNotification(和NSDistributedNotificationCenter),但如果你不小心你很容易遇到竞争状态
  • 使用NSPorts来回发送数据

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

答案 1 :(得分:1)

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

然后有NSOperationQueue和NSOperation,这对简化多线程编程有很大帮​​助,尽管许多程序员已经避免使用它,因为它可能在Leopard下的某些情况下导致崩溃。

答案 2 :(得分:0)

请查看Apple文档。

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

Multi-threaded Cocoa Programs