我很感興趣,然後在PPL中構建的目的是什麼,我可以在哪裏測試它?看來Visual Studio 2012還不支持它(可能會有一些未來的CTP?)。它是否具有標準C++ 11異步庫中的等價物?PPL任務構建的目的是什麼?
2
A
回答
6
目的是讓您能夠表達必須按順序執行的異步任務。
例如,假設我在GUI應用程序中。當用戶按下按鈕時,我想異步啓動任務以在線檢索文件,然後對其進行處理以檢索某種數據,然後使用此數據更新GUI。發生這種情況時,還有很多其他任務正在進行,主要是爲了保持GUI的響應。
這可以通過使用調用回調的回調來完成。 與lambda相關聯的.then()功能允許您在其中實例化所有回調內容(如果需要,仍然可以使用單獨的回調)。 它也不能保證每個單獨任務的工作將由同一個線程完成,如果初始線程已經有太多工作要做,可以讓空閒線程竊取任務。
.then()函數在C++ 11中不存在,但建議添加到std :: future類(基本上是任務或任務結果的句柄)。
4
Klaim已經做出了很好的回答,但我想我會舉一個具體的例子。基本上,
.then
附加一個延續到任務,並且是異步同步.get
。
C++ 11有std::future
,這相當於concurrency::task
。目前只有.get
,but there is a proposal to add .then
(and other good stuff)。
std::async(calculate_answer(the_question_of_everything))
.then([](std::future<int> f){ std::cout << f.get() << "\n"; });
上面的代碼將創建一個異步任務(std::async
推出),然後安裝它獲取一旦上述任務完成後通過完成任務的std::future
的延續。實際上這返回std::future
爲任務,並且當前C++ 11標準將在其析構函數but there is another proposal to make the destructor unblocking上阻塞。因此,通過上面的代碼,您可以創建一個即開即用的任務,一旦計算出答案就會打印答案。
阻塞相當於是:
auto f = std::async(calculate_answer(the_question_of_everything));
std::cout << f.get() << "\n";
此代碼將在f.get()
阻塞,直到答案可用。
相關問題
- 1. 什麼是構建簡單團隊任務管理的工具?
- 2. 什麼是可以執行的所有自動構建任務?
- 3. 什麼是TFS 2012等效TFS 2008執行任務的構建?
- 4. PPL when_all與不同類型的任務?
- 5. 爲什麼MSBuild任務不會構建項目依賴關係?
- 6. 構建構建是什麼?
- 7. 根據父項目的任務,Gradle子項目任務的語法是什麼?
- 8. 構建和構建OCaml項目的首選方式是什麼?
- 9. 我的任務的Gradle增量構建:出了什麼問題?
- 10. 是什麼異步任務和任務
- 11. 構建我的xcode項目時構建了什麼目標
- 12. MS構建的Perforce任務構建
- 13. 什麼是PHPCI - 什麼是構建?
- 14. 爲什麼我的Gulp構建任務沒有正確設置?
- 15. 爲什麼是「異步任務」的方法不是任務
- 16. 究竟是什麼任務
- 17. ValidateSilverlightFrameworkPaths任務?那是什麼?
- 18. 什麼是compileDebugJavaWithJavac任務?
- 19. 從cron任務構建項目
- 20. MSBuild:我在構建服務器上需要什麼來構建我的項目
- 21. 什麼是構建任何jQuery插件的最佳語法?
- 22. Windows PPL(C++):這是測試任務是否完成的正確方法嗎?
- 23. Docker構建上下文的目的是什麼?
- 24. Android中的多項目構建的好處是什麼?
- 25. Gulp構建任務
- 26. Rake中的「環境」任務是什麼?
- 27. 什麼是Java中的任務?
- 28. 什麼是任務的回報?
- 29. MapReduce不足夠的任務是什麼?
- 30. 相當於Promise.then()的任務是什麼?
文件說了什麼? –
Visual Studio 2012確實支持.then()和PPL,當你嘗試和使用它時,你看到了什麼問題? – mattnewport