gpt4 book ai didi

Cocoa的事件驱动系统: where do background tasks run?

转载 作者:行者123 更新时间:2023-12-03 16:24:48 26 4
gpt4 key购买 nike

在 Mac OS X 上,Cocoa 是事件驱动的。我的意思是每件事都是由 UI 驱动的 - 用户单击某些内容或在某个区域上移动会导致调用事件处理程序。 Main 只是简单地调用 NSApplicationMain (),它会创建一个无限循环,直到程序退出。

那些不是用户驱动的任务呢?我应该将需要在后台运行以提供程序基本功能的任务放在哪里?例如,当用户与 UI 交互时,Photo Booth 会执行某些操作(即,当用户单击某个按钮时更改摄像机)。但是,Photo Booth 还会不断从相机检索帧以提供视频流。

所以我的问题是非 UI 任务代码去哪里? Main() 并不是真正的可能性,因为我需要任务在程序的整个生命周期中运行,而不是在程序刚刚启动时运行。

我使用的是 Mac OS X Snow Leopard(不过我想要一些可以在所有 Mac 系统上运行的东西:即 Lion OS X),并且正在 Xcode 中使用 Obj-C Cocoa 应用程序。

最佳答案

任何基于 Cocoa 的应用程序都可以访问使用 RunLoops .

您的应用程序想要执行的任何工作都将利用 RunLoop 来执行。通常,这是在其他线程上完成的,但如果工作量足够轻,不会导致 UI 线程阻塞,则可以在主线程 RunLoop 上运行代码。

我建议阅读 Apple 的 Thread Programming Guide了解更多信息。

Grand Central Dispatch ,编程模型已经发生变化,以利用当今的多核系统,因此可以定义任务并让操作系统管理其执行。

关于Cocoa的事件驱动系统: where do background tasks run?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828071/

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