在windows上,每个线程都有一个消息队列,每个消息队列将处理该线程拥有的窗口的消息。 这意味着编写一个应用程序非常简单,您可以在其中创建线程,使用消息循环和一个(或多个)窗口。忽略任何类型的应用程序问题,现在有一个应用程序窗口将继续与用户进行交互,即使其中某个窗口忙于某种模式操作。可可,Windows和线程?
现在,在将应用程序移植到可可时,我遇到了Interface Builder。对于希望更多地控制窗口创建和消息循环构建的人来说,这是一个惊喜。无论如何,我都能看到IB来自哪里。
然而,我的问题在于不透明的函数NSApplicationMain()。这在应用程序主线程中会自动创建应用程序主窗口,并运行消息泵,所有数据都从NIB文件很好地驱动。
但是,这给我留下了一个问题:即使我购买到Interface Builder是制作主应用程序窗口的方法 - 我已经计算出足够多的目标C来动态创建子窗口 - 以及如何创建线程 - 我可以看到如何在工作线程中创建消息泵。我开始怀疑它的可能性。
做可可的窗户甚至有那种线程亲和力吗?在Win32中?即每个线程对于该线程拥有的窗口都有自己的消息分派循环?我开始怀疑Cocoa可能期望我的所有窗口都被主线程“拥有”,并且我只能抵消其他线程的工作(和绘图)。
任何有关如何最佳地将多窗口每线程Win32应用程序转换为Cocoa范例的线索?
tl; dr版本:“Cocoa是像WPF一样的单线程UI工具包,可以在其他线程上工作” –
可爱,但不正确。可可实际上有一堆对多线程的支持,包括多线程绘图。它没有做的是让多个线程独立处理事件(因为很大程度上,这是没有意义的)。 – bbum
@bbum这就是我的意思,除非你强制它,Cocoa将有1个事件循环用于处理UI消息。我的tl;博士;版本不是很好解释,但我试图保持简短:) –