我有很多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,停止並等待2秒
- 2. 如何等待NSThread,直到iOS中發生某些事件?
- 3. iOS - Objective-C - 如何在等待時停止NSThread?
- 4. 使用NSThread來解決從URL在iPhone上等待圖像
- 5. 我無法等待等待?
- 6. 異步等待不等待
- 7. 等待Task.WhenAll()與Task.WhenAll()等待()
- 8. 等待工作不等待
- 9. '等待$ COPROC_PID' 不等待
- 10. 如何在線程正在等待接收數據包時取消NSThread?
- 11. 等待
- 12. 等待
- 13. SDL_RenderPresent()不等待vsync - 如何等待?
- 14. 等待Task.WhenAll vs ..select(async .. =>等待)
- 15. 等待/異步任務不等待
- 16. C#異步任務等待VS等待
- 17. 等待屏幕,等待響應
- 18. 在等待裏面另一個等待
- 19. 正確等待等待元素消失?
- 20. 異步等待WhenAll不等待
- 21. 等待任務取消永久等待
- 22. Windows Phone 8等待不等待
- 23. DART異步/等待不等待
- 24. 流利的等待和WebDriver等待
- 25. ,(AWAIT後等待)
- 26. Task.WhenAll不等待
- 27. 等待instantiateViewControllerWithIdentifier
- 28. 佈局等待
- 29. 等待過程
- 30. BootstrapDialog.confirm不等待
但我已經使用NSThread編寫了如此多的代碼!有NSThreads的方式嗎? – 2011-01-30 21:11:46