OS X межпотоковый вопрос связи - PullRequest
3 голосов
/ 08 декабря 2008

Я разрабатываю многопоточное приложение в Какао. Основной поток получает значения от пользователя, и когда нажимается кнопка, я запускаю дополнительный поток, в котором выполняется длинный расчет. Теперь из этого потока я должен возвращать вывод каждого шага вычисления в основной поток. Я хочу периодически отправлять данные из одного потока в другой. Я не могу найти простой пример, который делает это. Есть идеи?

Ответы [ 3 ]

5 голосов
/ 08 декабря 2008

Есть несколько способов сделать это в грубом порядке сложности (сначала проще):

  • используйте executeSelectorOnMainThread: withObject: waitUntilDone: это довольно очевидно.
  • используйте executeSelector: onThread: withObject: waitUntilDone:, который позволит вам пойти другим путем
  • используйте NSNotification (и NSDistributedNotificationCenter), хотя вы можете легко столкнуться с состоянием гонки, если не будете осторожны
  • Использование NSPorts для отправки данных туда и обратно

Ознакомьтесь с документом, упомянутым Abizer, для получения подробной информации по всем этим вопросам.

1 голос
/ 08 декабря 2008

performSelectorOnMainThread:withObject:waitUntilDone: часто является самым простым способом обновления пользовательского интерфейса с помощью прогресса фонового потока. Вы также можете создать свою собственную область хранения, к которой можно безопасно обращаться между потоками, используя NSLock или аналогичный механизм, или даже использовать распределенные объекты (которые также работают между процессами или по сети).

Тогда есть NSOperationQueue и NSOperation, которые очень помогают упростить многопоточное программирование, хотя многие программисты избегают его, так как это может вызвать сбой при определенных обстоятельствах под Leopard.

0 голосов
/ 08 декабря 2008

Посмотрите на документы Apple для этого.

Возможно, вам потребуется создать учетную запись участника ADC, но это бесплатно

Многопоточные программы Какао

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...