Multithreading 使用Cocoa和辅助线程

Multithreading 使用Cocoa和辅助线程,multithreading,macos,cocoa,Multithreading,Macos,Cocoa,我正在构建一个Cocoa应用程序,它有一个工作线程,等待输入数据,当输入数据可用时,处理它并请求对处理后的数据进行显示更新 我遇到了同步问题,因为我的控件的drawRect正在与我的工作线程异步调用,我不希望在处理数据时访问数据。但是,我确实需要显示每个已处理的数据块 我现在看到的唯一解决方案是使用互斥体和事件来确保在process函数之后绘制每个数据块,并使用另一组互斥体来确保在处理数据时没有调用drawRect 这对我来说似乎有点笨拙,我想知道是否有更优雅的方法来解决这个问题?(我不想在Co

我正在构建一个Cocoa应用程序,它有一个工作线程,等待输入数据,当输入数据可用时,处理它并请求对处理后的数据进行显示更新

我遇到了同步问题,因为我的控件的drawRect正在与我的工作线程异步调用,我不希望在处理数据时访问数据。但是,我确实需要显示每个已处理的数据块

我现在看到的唯一解决方案是使用互斥体和事件来确保在process函数之后绘制每个数据块,并使用另一组互斥体来确保在处理数据时没有调用drawRect


这对我来说似乎有点笨拙,我想知道是否有更优雅的方法来解决这个问题?(我不想在Cocoa的主循环中运行我的工作线程,因为它在数据可用之前一直处于阻塞状态)

使用现代方法而不是显式锁定如何

这是您正在描述的一种非常适合操作队列的方法(从10.6开始在OSX上可用)

你可以退房

后者已经有了一个很好的例子,应该是一个几乎完美的适合您的问题

如果您想深入到这个级别并直接使用gcdapi,您可能会对一个类似的示例感兴趣,该示例介绍了如何在没有更高级别的Cocoa操作队列API的情况下实现几乎相同的功能