0

問題があります...

私はこれを必要とする:

新しいスレッドを作成し、一時停止します ( MainThread からの通知を待ちます) 。MainThread でトリガーを引いて、このバックグラウンド スレッドを再開します。

メインスレッドで:

[NSThread detachNewThreadSelector:@selector(startTheBackgroundJob:) toTarget:self withObject:nil];

バックグラウンド スレッド:

- (void) startTheBackgroundJob {
    @autoreleasepool {

        NSLog(@"+ Thread %@ started and waiting.", self.identifier);
        // Pause Here
        NSLog(@"- Thread %@ unlocked", self.identifier);

        [Scheduler doneTransaction: self];
    }
}

メインスレッド:

- (void) unlock {
    // resume a background thread
}

NSLock、NSConditionLock、Semaphore GCD を試しました....

4

2 に答える 2

0

これは、 NSConditionオブジェクトを使用する必要がある場合の典型的なシナリオです。スレッドは何らかの条件が真になるまで待機する必要があるため、lockwait、およびsignalを使用してこれを実現します。

[sharedCondition lock];
while(!go)
{
    [sharedCondition wait];
}
[sharedCondition unlock];

スレッドに通知するには、条件を通知する必要があります。

[sharedCondition lock];
go= YES;
[sharedCondition signal];
[sharedCondition unlock];
于 2013-07-05T23:07:24.057 に答える
0

できることの 1 つは、バックグラウンド スレッドを while ループに入れることです。メイン スレッドが、バックグラウンド スレッドを続行できるポイントに到達したら、バックグラウンド スレッドを while ループから追い出すだけです。例えば:

...
self.stayInLoop = YES; // BOOL in header - initialized before your thread starts
...

- (void)startTheBackgroundJob {
    while (stayInLoop) {
        // here your background thread stays in this loop (waits) until you 
        // change the flag
    }
    // more background thread code to be executed after breaking out of the loop
}

- (void)unlock {
    self.stayInLoop = NO;
}
于 2013-07-05T22:56:26.367 に答える