gpt4 book ai didi

multithreading - 使用 Cocoa 和工作线程

转载 作者:行者123 更新时间:2023-12-03 17:52:18 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

这是一个 classical producer-consumer scenario您所描述的它非常适合操作队列(自 10.6 起可在 OS X 上使用)。

您可以查看

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

如果你想进入Grand Central Dispatch级别并直接使用 gcd API 您可能会对 this article 感兴趣有一个类似的示例,说明如何在不使用更高级别的 Cocoa 操作队列 API 的情况下实现几乎相同的效果。

关于multithreading - 使用 Cocoa 和工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22828971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com