我有一個以編程方式創建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