iOS アプリで取得したいくつかのバックグラウンド スレッドを同期する必要がありました。コードの実行を線形に保つために、一方のスレッドの実行を保持し、もう一方のスレッドがそのジョブを実行する何かが必要でした。
私は一日中このコードと戦っていましたが、たくさん読んだ後、このコードを思いつきました:
-(void)waitOne:(double)timeout
{
if (!shouldRun)
{
shouldRun = true;
double runs = 0;
do {
NSDate* next = [NSDate dateWithTimeIntervalSinceNow:0.5];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:next];
runs++;
} while ((runs/2) < timeout && shouldRun);
}
else
{
@throw [NSException exceptionWithName:@"InvalidHandle" reason:@"The currenct handle is in use" userInfo:nil];
}
}
私はそれが仕事を成し遂げたとあなたに言うことができます。しかし、そのアルゴリズムのアイデアを見つけたフォーラムで、「ループがビジー状態になる」という悪いフィードバックもいくつか見つかりましたが、それは悪い考えでした。だから、ここに聞きに来ました。私が望むものを達成するためのより良い方法はありますか?