2013-06-23 45 views
1

比方說,在我的GUI應用程序中(它可以跨OSX/iOS移植),我有多個線程可能會向主應用程序線程發送通知。通知應該在Cocoa的輸入事件和重繪請求處理的相同上下文中處理。我的目標是在屏幕上反映來自併發線程的某些事件。將消息發佈到Cocoa應用程序的主事件循環?

在Windows上有PostMessage(),那麼它在OS X和iOS上的模擬是什麼?

dispatch_async()似乎是這種緊密的候選,但是,文檔說:

目標隊列確定塊是否相對於提交到同一 隊列其它塊調用串行或 同時。

其中,誠實地說,只是造成混亂。另外,還不清楚哪個消息隊列要與dispatch_async一起使用,以便相對於GUI事件對消息進行串行處理。

回答

2

更老派的方式做它在OS X是NSObject的方法performSelectorOnMainThread:withObject:waitUntilDone:。我預計它也可以在iOS上運行。

+0

我喜歡積木,但不知何故,我發現這種方法更優雅,更好地融入到ObjC代碼中。感謝你的回答! – mojuba

5

你是對的dispatch_async是要走的路。你應該尋找的隊列是主要的隊列:

dispatch_async(dispatch_get_main_queue(), ^{ 
    NSLog(@"Got to main thread."); 
}); 
+0

就像我在其他評論中所說的,我喜歡塊,但不知何故,我發現方法與'performSelectorOnMainThread'更優雅,更好地「混合」到ObjC代碼。所以我會接受其他答案,但是謝謝你的答覆! – mojuba

相關問題