私は多くのNSThreadを持っています。彼らが働いている間に眠りたいです。どうしたらいいですか? iOS SDKにWinApi関数WaitForSingleObject/WaitForMultipleObjectsのアナログがありますか?NSThreadを待つ
答えて
かなりの方法がありますが、私の主な提案はlibdispatchを使うことです。代わりに産卵NSThreadsの
は行います
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
/* work to do in a thread goes here */
});
/* repeat for other threads */
dispatch_group_wait(group, DISPATCH_TIME_FOREVER); //wait for all the async tasks in the group to complete
は、ドキュメントのhttp://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_group_async.3.htmlを参照してください。
代わりに、posixまたはdispatch(http://www.csc.villanova.edu/~mdamian/threads/posixsem.htmlにはhttp://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.htmlのような情報があります)のセマフォを使用することもできます。
(1つのより多くの選択肢を追加して編集した):
これはまた、すべてのスレッドが(つまり、タスクを分割ではなく、異なるタスクの束をやって)本質的に同じ仕事をしている場合はうまく動作し、かつあるだろうはるかに簡単:
dispatch_apply(count, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i){
doWork(someData, i);
});
本当にあなたのアプリのアーキテクチャを再考する必要がありますように聞こえます。特にiOS上で多くのスレッドを持つことは、シンプルな設計よりもかなり遅く、そして間違いなくバギーになることが保証されています。
iOSでは、コアが1つしかなく、バスの帯域幅が大幅に制限されています。
可能な限り上位レベルのシステム提供の並行性ツール(NSOperation、ディスパッチ、および非同期APIのいずれか)を使用する方がずっと良いでしょう。
- 1. NSThreadを終了
- 2. NSThreadエラー
- 3. NSThread VS pthreads
- 4. NSNotificationとNSThread
- 5. MKReverseGeocoder in NSThread
- 6. NSThread sleepfortimeintervalブロックメインスレッド
- 7. Cocoa - NSThreadとFirst Responder
- 8. iOSのNSThread番号?
- 9. プロセスを待つ
- 10. nsthreadインターフェイスをフリーズしても
- 11. NSThreadの複数のパラメータを持つ1つのメソッドを呼び出す
- 12. 時間を待つ
- 13. 更新を待つ
- 14. スレッドがパケットの受信を待っているときにNSThreadをキャンセルするには?
- 15. iOS - Objective-C - 待機中のNSThreadを停止するにはどうすればいいですか?
- 16. NSOperationでNSThreadスリープを使用する
- 17. このコードでNSThreadを使用する
- 18. 待つデバッガは、NetBeans
- 19. NSURLConnectionの完了を待つ
- 20. ポータブルクラスライブラリを待つ&メソッドGetType()IsValueType
- 21. Chrome content_script:jQueryを待つ方法
- 22. WebClient.UploadStringAsyncリクエストを '待つ'方法
- 23. JAVAでイベントを待つ
- 24. Pygameがキーダウンを待つ
- 25. socket.io - socket.on約束を待つ
- 26. wgetのダウンロードを待つ
- 27. イベントの再生を待つ
- 28. センサーデータを待つ方法
- 29. スレッドの作成を待つ
- 30. 複数のコールバックを待つ
しかし、私はすでにNSThreadを使ってたくさんのコードを書いています! NSThreadsには何らかの方法がありますか? –
はい、私が述べたセマフォはNSThreadsでうまく動作します。 –
iOS SDKにセマフォーはありますか? –