Как я могу получать уведомления, пока модальный диалог открыт - PullRequest
1 голос
/ 11 августа 2010

Мне нужно отправлять сообщения в поток GUI, который должен быть обработан в следующий раз, когда поток GUI простаивает. Это сообщение может поступать из потока GUI или фоновых потоков.

Я попробовал комбинацию MachPort / Notification. Но когда я делаю

[[NSNotificationQueue defaultQueue] enqueueNotification: my_notify postingStyle: NSPostASAP];

Это не отправляется, если есть модальное диалоговое окно, я должен закрыть диалоговое окно, прежде чем оно будет обработано, так что это не пригодится для меня.

Можно не обрабатывать сообщения во время выбора меню или изменения размера в реальном времени, но в модальных диалоговых окнах задержка слишком велика.

1 Ответ

0 голосов
/ 12 августа 2010

Краткий ответ: не используйте модальные диалоги.

Длинный ответ: Модальные диалоги обрабатываются специальным режимом цикла выполнения, который называется NSModalPanelRunLoopMode, см. здесь .Чтобы запланировать вызов, можно использовать performSelectorOnMainThread:withObject:waitUntilDone:modes:, описанный в этом документе;не забудьте указать там модальный режим и режим по умолчанию.

Вы также можете использовать NSNotificationCenter и указать режимы цикла выполнения, см. обсуждение здесь .Но сложно использовать NSNotificationCenter из многопоточной среды, чтобы начать, как описано здесь , поэтому я не рекомендую это.

На 10.6 вы также можете использовать dispatch_async.

...