NSOperationQueues в Задаче C - PullRequest
       0

NSOperationQueues в Задаче C

0 голосов
/ 01 июня 2011

Я новичок в программировании. Я портирую cpp (WIN32) на структуру какао. У меня есть метод с именем start (process), из которого вызывается 2 метода. Я хочу сделать операцию в нем параллельно. Я хочу сделать InterThread связь.

Это можно сделать с помощью executeSelectorOnMainThread: withObject: waitUntilDone.

Здесь мне нужно сначала вызвать 2-й поток, а 1-й поток - второй. 2-й поток ожидает сигнала 1-го потока (например: 1-й поток добавляет два нет, а 2-й поток выполняет отображение и некоторые другие операции )

[receiverobj performSelectorOnMainThread:withObject:waitUntilDone] 

- это синтаксис для этого. Но оба они являются методами экземпляра одного и того же класса. И возвращаемый тип 1-го потока является значением void, а возвращаемое значение 2-го потока - uint8_t. Как получить сигнал из 1-го потока во второй поток, который начал свое выполнение незадолго до 1-го потока.

1 Ответ

1 голос
/ 01 июня 2011

Первое, что касается Какао, это то, что весь код дисплея должен выполняться в главном потоке.Поэтому, если вы спрашиваете, как сообщить основному потоку, что он должен выполнить некоторую работу по отображению, performSelectorOnMainThread:waitUntilDone: - правильный ответ.Этот метод работает путем помещения искусственного «события» в цикл выполнения основного потока (цикл, который обрабатывает события из пользовательского интерфейса, таймеров и т. Д.).Получатель вызовет метод точно так же, как если бы вы вызвали его напрямую, но это произойдет в главном потоке.

Если вы хотите сообщить другому потоку о завершении работы дисплея, вы можете сделать это синхронно, как это:

[receiver performSelectorOnMainThread: @selector(mySelector) withObject: nil waitUntilDone: YES];

Затем вызывающий поток приостанавливается до завершения метода.

Если вы просто хотите запустить и забыть, что это

[receiver performSelectorOnMainThread: @selector(mySelector) withObject: nil waitUntilDone: NO];

Шаблон является универсальнымв любой поток с помощью метода executeSelectorOnThread: withObject: waitUntilDone: .Однако, если вы сделаете это, вы должны убедиться, что целевой поток выполняет цикл выполнения .

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