如果塊必須等到主線程結束,爲什麼有人會使用dispatch_sync
。使用這個函數有什麼好處,而不是在線編寫代碼(在Grand Central Dispatch之外的非塊和代碼)。我可能會誤解dispatch_sync
實際上做了什麼。謝謝。如果必須等到主線程完成,才使用dispatch_sync有什麼好處?
回答
dispatch_sync
做了你的想法 - 它將塊發佈到指定隊列並阻塞當前隊列,直到塊被執行。主要的隊列/線程不是特別牽扯,除非你調度它或從它。
因此,如果必須在不同的隊列/線程上執行操作(例如SQLite或OpenGL操作),您通常會使用它,但是您需要操作的結果或只需知道操作已完成功能條款。
模式:
dispatch_async(otherQueue,
^{
id result = doHardTask();
dispatch_async(originalQueue,
^{
didGetResult(result);
});
});
是更好的做法,但不是真正的東西,你可以只粘上底。
您可以使用dispatch_async啓動併發隊列,並在與該調用相關聯的塊內使用dispatch_sync在第二個隊列上啓動一系列任務。這將全部發生而不阻塞主隊列。
是否有任何意見使用dispatch_sync,如果我使用所有dispatch_sync雖然?我正在查看某人的代碼,這就是他們使用的所有內容。似乎你可以在沒有塊的情況下做同樣的事情。沒有? – Ryan 2012-02-27 20:18:28
Offmy,我想不出在dispatch_async調度塊之外使用dispatch_sync的場合,正如Tommy的代碼所說明的那樣。 – 2012-02-28 00:10:07
- 1. 如果主線程完成,是否必須指示匿名線程退出?
- 2. 使主線程等到URLRequest完成
- 3. 等待,直到線程完成擺好
- 4. 使主程序等待線程完成
- 5. java:爲什麼主線等待子線程完成
- 6. 用線程編程有什麼好處?
- 7. 使用主線程隊列的主線程Dispatch_sync無用?
- 8. 使主線程等待,直到所有其他Qthread完成
- 9. 如何讓主線程等待所有子線程完成?
- 10. 等待所有線程完成的有用模式是什麼?
- 11. 有主線程等待一個線程完成任務(但沒有完成)
- 12. 如果我必須使用virsh,virt-install對kvm有什麼用處?沒有配置的kvm有什麼用處?
- 13. 如何使主要等待所有線程完成
- 14. 如果我已經完成了webform,使用ASP.NET MVC有什麼好處
- 15. 等到線程完成
- 16. Android:如果主線程在工作線程之前完成,會發生什麼?
- 17. Segue必須等待dispatch_queue完成
- 18. 等到子線程完成但不阻塞主線程
- 19. 爲什麼主線程在繼續之前等待另一個線程完成?
- 20. 啓動多個線程,爲什麼你必須等待?
- 21. ADMOB-java.lang.IllegalStateException:isLoaded必須調用主UI線程
- 22. 如何等待所有線程完成
- 23. 如何等待所有線程完成?
- 24. 如何使線程等到另一個線程完成啓動
- 25. 執行初始化程序必須完成什麼?
- 26. 在FXML應用程序中必須完成的所有「內務」是什麼?
- 27. 如何使執行器服務等到所有線程完成
- 28. 使用循環屏障不會等到所有線程完成
- 29. 在多個線程上使用單個io_service有什麼好處?
- 30. UI線程如何等待直到後臺線程完成處理?
可能的重複:http://stackoverflow.com/questions/4607125/usage-of-dispatch-sync-in-grand-central-dispatch – UIAdam 2012-02-27 20:02:54