パルスと待機のために.NETにあるように、iOSのマルチスレッドで同等のパターンを探しています。基本的には、フラグが設定されるまでバックグラウンド スレッドを休止状態にする必要があります。これにより、本質的にスレッドが実行されます。
これは loop+thread.sleep() の代替です。フラグは、処理を実行している実際のバックグラウンド スレッドとは異なるスレッドで設定できます。ありがとう!
パルスと待機のために.NETにあるように、iOSのマルチスレッドで同等のパターンを探しています。基本的には、フラグが設定されるまでバックグラウンド スレッドを休止状態にする必要があります。これにより、本質的にスレッドが実行されます。
これは loop+thread.sleep() の代替です。フラグは、処理を実行している実際のバックグラウンド スレッドとは異なるスレッドで設定できます。ありがとう!
iOS と OS X で利用できるさまざまな組み合わせのスレッド API があります。スレッドの作成に何を使用していますか?
最も簡単な提案は、Grand Central Dispatch (GCD) セマフォを使用することです。
セットアップ コード:
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
// Then make sure your thread has access to this semaphore
スレッド コード:
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
// Will block forever until the semaphore is triggered
トリガー コード:
dispatch_semaphore_signal(semaphore);
さらに良い提案: GCD は既に独自のスレッド プールを管理しているため、独自のスレッドをスピンアップする代わりにそれを利用してください。dispatch_async
バックグラウンド スレッドでコードを実行するのは非常に簡単です。
私は .NET でのこのパターンに精通していませんが、スレッドを意図的にロックすることは一般的に悪い考えです (そのスレッドが続行できない場合を除きますが、ほとんどの時間または少なくとも長期間待機させたいように思えます)。時間)。
これは、スケジューラにとっても、システム リソースにとっても悪いことです。
NSThread の +detachNewThreadSelector:... メソッドを使用して、新しいスレッドを作成できます。また、さまざまなアイデアを使用して、NSObject の -performSelectorOnMainThread:... のような単一の場所でそのようなスレッドを作成および維持するためのロジックを管理しようとすることができます。