15

タスクの一部を実行したいワーカースレッドがあり、一時停止して別のスレッドからの「OK、続行」コマンドを待機し、一時停止して待機します。

ユースケースは次のとおりです。制御オブジェクトは、ワーカースレッド内で何が起こっているかに関する情報を表示したいビューであり、ワーカーを「シングルステップ」で実行できるようにします。

私がワーカーに持っているかなり醜くて扱いにくいものは次のとおりです。

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

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

...しかし、おそらくNSLocksなどを含む、より良い方法があるに違いないと思わずにはいられません。

コメント、ヒントの提案?

ありがとう!

4

1 に答える 1

26

Threading ガイドのNSConditionConditionsセクションを調べてください。コードは次のようになります。

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];
于 2009-10-12T23:24:14.363 に答える