我有很多NSThreads,我想在他們工作的時候睡覺。我該怎麼做? iOS SDK中有WinApi函數WaitForSingleObject/WaitForMultipleObjects的模擬器嗎?等待NSThread
0
A
回答
6
有很多方法,但我的主要建議是研究使用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
另一種方法是使用posima或dispatch(http://www.csc.villanova.edu/~mdamian/threads/posixsem.html有一些信息,http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html)的信號量。
(編輯多加一個二選一):
這也將很好的工作,如果你所有的線程基本上做同樣的工作(即拆分任務,而不是做了一堆不同的任務),並且是更簡單:
dispatch_apply(count, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i){
doWork(someData, i);
});
0
這聽起來像是你應該重新考慮你的應用程序的體系結構。有很多線程,特別是在iOS上,幾乎可以保證比較簡單的設計更慢,最明顯的是比較簡單。
在iOS上,只有一個核心,總線帶寬非常有限。
儘可能使用更高級別的系統提供的併發工具(NSOperation,dispatch和任何異步API)將會好得多。
相關問題
- 1. 使用NSThread來解決從URL在iPhone上等待圖像
- 2. iOS - Objective-C - 如何在等待時停止NSThread?
- 3. 等待工作不等待
- 4. 等待
- 5. 等待
- 6. 等待/異步任務不等待
- 7. 流利的等待和WebDriver等待
- 8. DART異步/等待不等待
- 9. 等待屏幕,等待響應
- 10. C#異步任務等待VS等待
- 11. 正確等待等待元素消失?
- 12. 等待任務取消永久等待
- 13. Process.WaitForExit不等待
- 14. Msgbox等待,VB.NET
- 15. Scala Swing等待
- 16. 等待HtmlElements
- 17. WatiN - 等待Cookies
- 18. 等待進程
- 19. 等待處理
- 20. ThreadLocal並等待
- 21. 等待線程
- 22. 等待NSURLConnection
- 23. 等待完成
- 24. 等待[NSAlert beginSheetModalForWindow:...];
- 25. setTimeout()不等待
- 26. 等待InvokePattern.Invoke()
- 27. 等待元素
- 28. /等待8.5
- 29. 差/等待
- 30. Task.WhenAll不等待
但我已經使用NSThread編寫了如此多的代碼!有NSThreads的方式嗎? – 2011-01-30 21:11:46