私は多くの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. NSNotificationとNSThread
- 4. MKReverseGeocoder in NSThread
- 5. NSThread VS pthreads
- 6. NSThread sleepfortimeintervalブロックメインスレッド
- 7. iOSのNSThread番号?
- 8. Cocoa - NSThreadとFirst Responder
- 9. Objective-C Loop in NSThread
- 10. nsthreadインターフェイスをフリーズしても
- 11. NSThreadの複数のパラメータを持つ1つのメソッドを呼び出す
- 12. NSOperationでNSThreadスリープを使用する
- 13. このコードでNSThreadを使用する
- 14. "HTTPClient.GetAsyncを待つ"
- 15. プロセスを待つ
- 16. スレッドがパケットの受信を待っているときにNSThreadをキャンセルするには?
- 17. iOS - Objective-C - 待機中のNSThreadを停止するにはどうすればいいですか?
- 18. 時間を待つ
- 19. Webdriver.io:メソッドを待つ
- 20. 更新を待つ
- 21. を待つ - キャッチエラー - UnhandledPromiseRejectionWarning
- 22. スウィフトユニットテスト - viewDidLoadを待つ
- 23. ロックを待つ.ivy2
- 24. Springを待つListenableFuture
- 25. gcloudドッカーを待つ -
- 26. iPhoneの目的c NSThreadのAsyncron HTTPSリクエスト
- 27. NSThreadからの呼び出しメソッド
- 28. スリープまたは一時停止NSThread
- 29. 他のNSThreadからの代理コールバック
- 30. iPhone SDKアプリケーションのNSThread、NSTimer、およびAutoreleasePool
しかし、私はすでにNSThreadを使ってたくさんのコードを書いています! NSThreadsには何らかの方法がありますか? –
はい、私が述べたセマフォはNSThreadsでうまく動作します。 –
iOS SDKにセマフォーはありますか? –