Как приостановить NSThread до уведомления?

У меня есть рабочий поток, который я хочу выполнить один бит своей задачи, а затем приостановить и дождаться команды "ok, continue" из другого потока, затем приостановить и подождать и т.д.

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

Скорее уродливая и тяжелая вещь, которую я имею в моем работнике, такова:

NSLog(@"paused");
paused = YES;

while (paused)
{
    [NSThread sleepForTimeInterval:0.25];
}
NSLog(@".. continuing");

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

Комментарии, подсказки предложения?

Спасибо!

Ответы

Ответ 1

Посмотрите NSCondition и Условия в направляющей Threading. Код будет выглядеть примерно так:

NSCondition* condition; // initialize and release this is your app requires.

//Worker thread:
while([NSThread currentThread] isCancelled] == NO)
{
    [condition lock];
    while(partySuppliesAvailable == NO)
    {
        [condition wait];
    }

    // party!

    partySuppliesAvailable = NO;
    [condition unlock];
}

//Main thread:
[condition lock];
// Get party supplies
partySuppliesAvailable = YES;
[condition signal];
[condition unlock];