我需要向 GUI 线程发送消息,该消息应在 GUI 线程下次空闲时进行处理。该消息可以来自 GUI 线程或后台线程。
我尝试了 MachPort/通知的组合。但是当我做
[[NSNotificationQueue defaultQueue] enqueueNotification: my_notify postingStyle: NSPostASAP];
如果存在模式对话框,则不会调度该对话框,我必须在处理该对话框之前关闭该对话框,因此这对我来说不可用。
在菜单选择或实时调整大小期间不处理消息是可以的,但模式对话框的延迟有点太多。
最佳答案
简短回答:不要使用模式对话框。
长答案:模态对话框由称为 NSModalPanelRunLoopMode
的特殊运行循环模式处理。 ,参见here 。
要安排通话,一种方法是使用 performSelectorOnMainThread:withObject:waitUntilDone:modes:
该文件中进行了解释;不要忘记指定模态模式和默认模式。
您还可以使用NSNotificationCenter
并指定运行循环模式,请参阅the discussion here 。但使用 NSNotificationCenter
却很棘手从线程环境开始,如所述 here ,所以我不推荐。
在 10.6 上,您还可以使用 dispatch_async
.
关于cocoa - 当模式对话框打开时如何接收通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3458448/