Потоки в Objective C - PullRequest
       28

Потоки в Objective C

0 голосов
/ 25 мая 2011

Я портирую код cpp на Objective C. Я новичок в этом программировании.

Мне нужно запустить поток, в котором этот поток вызывает функцию timeoutThread.and в одной функции с именем insert () ониустанавливая событие с помощью setEvent (m_Thread) и в функции timeoutThread они ждут события, вызывая waitforsingleobject (m_thread, delay). и чуть выше waitforsingleObject они устанавливают другое событие с помощью setEvent (m_ThreadEvent) .и выполняя другие действиявнутри функции потока времени ожидания.Я создал NSOperationQueue и вызвал функцию с initWithTarget: toTarget: object. Но как я устанавливаю события и уведомляю так же, как они делают в cpp в Objective C.

Любое объяснение по этому поводу с помощью простогоПример был бы очень полезен для начинающего, как я.

1 Ответ

1 голос
/ 25 мая 2011

Я признаю, что не совсем разбираюсь в способе Windows делать эти вещи, но я представляю, что примитив, который вам нужен, если вы ожидаете только одного флага, это NSConditionLock .У каждой блокировки условий есть определенное условие, потоки могут пытаться заблокировать его, не обращая внимания на условие или только когда оно имеет определенное условие, необязательно с таймаутом для обоих.После этого они могут разблокировать и, при необходимости, установить новое условие.

Возможно, более простым подходом является создание ваших NSThreads вручную, а не просто выгрузка операций в NSOperationQueue.Каждый NSThread автоматически имеет NSRunloop, поэтому вы можете использовать семантику, например:

[object performSelector:@selector(operation:) onThread:targetThread withObject:someArgumentForOperation waitUntilDone:NO];

В этом случае метод 'операция:' будет вызван с назначенным аргументом в назначенном потоке, как только появится такая возможность,и вызывающий поток не заблокирован.Runloops решают ту же проблему, что и классические механизмы отправки сообщений win32, но перекладывают ответственность - Какао занимается блокировкой потоков, пробуждением сообщений и выполнением соответствующих вызовов функций.

...