我有一个以编程方式创建NSWindow + NSView的基于Cocoa的命令行应用程序。它使用nextEventMatchingMask循环手动抽取事件循环和调度事件。这个循环被一些高级代码周期性地调用来轮询输入。从后台线程中抽取可可消息循环
如果我在主线程上运行所有东西,那么这个工作正常,视图正确接收输入事件。
如果我将窗口创建和消息循环移动到单独的线程,则nextEventMatchingMask不再返回任何事件,并且视图不会接收输入。
我知道只有Cocoa应用中的“主”线程应该处理事件。然而,这个辅助线程是唯一需要与Cocoa交谈的线程,所以我想将它用作Cocoa所关注的“主”线程。这可能吗?我从这个线程调用了NSApplicationLoad,并且据我所知这是在这个过程中调用的第一个Cocoa函数。
如果我不能指定哪一个是主Cocoa线程,那么有没有其他方法能够在后台线程上创建NSWindow并接收它的事件?我不能做类似于调用NSApplication Run的事情,因为我没有控制应用程序的主循环。当上层代码请求我这样做时,我只需要从Window中提取输入事件。
此:http://stackoverflow.com/questions/6178618/mac-os-x-is-it-possible-to-imbue-a-non -main-thread-to-become-the-main-thread听起来和我的情况完全一样。 – eodabash 2012-01-11 02:28:12