【发布时间】:2010-01-13 22:27:42
【问题描述】:
在 Windows 上,每个线程都有一个消息队列,每个消息队列都会为该线程拥有的窗口处理消息。 这意味着编写一个应用程序非常简单,您可以在其中创建一个线程、一个消息循环和一个(或多个)窗口。忽略任何类型的应用程序问题,现在一个应用程序窗口将继续与用户交互,即使其他窗口之一忙于某种模式操作。
现在,在将应用程序移植到 cocoa 时,我遇到了 Interface Builder。对于希望更多地控制窗口创建和消息循环构造的人来说,这是一个惊喜。尽管如此,我还是能看出 IB 是从哪里来的。
然而,我的问题在于不透明的函数 NSApplicationMain()。这 - 在应用程序主线程上,自动创建应用程序主窗口,并运行消息泵,所有数据都来自 NIB 文件。
然而,这给我留下了一个问题:即使我相信 Interface Builder 是制作我的主应用程序窗口的方法——而且我已经找到了足够的目标 C 来动态创建子窗口——以及如何创建线程 - 我可以看到如何在工作线程中创建消息泵。我开始怀疑它的可能性。
cocoa 中的窗口是否甚至具有它们在 Win32 中的那种线程亲和性?即每个线程都有自己的消息调度循环,用于该线程拥有的窗口?我开始怀疑 Cocoa 可能希望我的所有窗口都由主线程“拥有”,而我只是将工作(和绘图)偏移到其他线程上。
关于如何最好地将多窗口每线程 Win32 应用程序转换为 Cocoa 范例的任何线索?
【问题讨论】:
标签: windows cocoa multithreading