cocoa,Windows和线程?

Windows上,每个线程都有一个消息队列,每个消息队列将处理该线程拥有的窗口的消息。 这意味着编写一个应用程序非常简单,您可以在其中创build线程,使用消息循环以及一个(或多个)窗口。 忽略任何types的应用程序问题,现在有一个应用程序窗口将继续与用户交互,即使其中一个窗口忙于某种模式操作。

现在,在将应用程序移植到cocoa时,我遇到了Interface Builder。 对于希望更多地控制窗口创build和消息循环构build的人来说,这是一个惊喜。 无论如何,我可以看到IB来自哪里。

然而,我的问题在于不透明的functionNSApplicationMain()。 这 – 在应用程序主线程上,自动创build应用程序主窗口,并运行消息泵,从NIB文件很好地驱动所有数据。

然而,这给我留下了一个问题:即使我买入了Interface Builder这个想法来制作我的主应用程序窗口 – 我已经find了足够的目标C来创build子窗口 – 以及如何创build线程 – 我可以看到如何在工作线程中创build消息泵。 我开始怀疑它的可能性。

在cocoa中的窗口甚至有他们在Win32中的那种线程亲和力? 即每个线程都有自己的消息调度循环为该线程拥有的窗口? 我开始怀疑Cocoa可能期望我的所有窗口都被主线程“拥有”,而我只是将工作(和绘图)抵消到其他线程上。

任何线索如何最好地将一个多窗口的每个线程的Win32应用程序翻译成Cocoa的范例?

Interface Builder是这个讨论中的一个红鲱鱼。 真正的问题是以可可的设计模式为中心,这两个段落从你的问题是关键:

然而,这给我留下了一个问题:即使我买入了Interface Builder这个想法来制作我的主应用程序窗口 – 我已经找到了足够的目标C来创建子窗口 – 以及如何创建线程 – 我可以看到如何在工作线程中创建消息泵。 我开始怀疑它的可能性。

在可可中的窗口甚至有他们在Win32中的那种线程亲和力? 即每个线程都有自己的消息调度循环为该线程拥有的窗口? 我开始怀疑Cocoa可能期望我的所有窗口都被主线程“拥有”,而我只是将工作(和绘图)抵消到其他线程上。

总而言之,不,它不是那样工作的。 Cocoa有一个完全不同的事件处理模型和一组完全不同的工具来支持并发。

值得注意的是,Cocoa拥有强大的主事件循环的概念, 总是在主线程上运行。 这是处理用户事件的地方,几乎所有绘图都发生(尽管这个限制随着时间的推移已经放松了)。

这是不同的,并试图弯曲它的工作像螺纹每窗口泵是一个极端的痛苦的道路。 不要下去

现在,Cocoa每个线程都有运行循环。 但是它们不被用来处理用户事件。

简而言之,您将需要重新审视应用程序的架构,以将代码提交给Cocoa。 一个直的港口是不可能的。