2011-10-03 47 views
7

尤其是即將推出的Windows (含地鐵)將要求任何IO異步編程。在C#/ .Net中,似乎有特殊的await以及類似的構造,JavaScript API將有自己的工作機制。將C++ 11異步/期貨與Windows異步IO結合的最佳API是什麼?

會是怎樣的C++ 11的集成是什麼?現代(或即將到來的)Windows是一個簡明的例子(例如,從文件中讀取圖像以供顯示?)?如果它是使用C++ 11功能我期望asyncfuture被捲入?

+0

異步和/或未來可能不會參與其中。 Windows 8異步內容與PPL和基於任務的編程和協作式阻塞相結合。異步和未來是基於線程和線程阻塞的。 – ronag

+0

哦,是的,從PPL我聽說,至少。 – towi

+0

@Pavel我不太明白怎麼看? C++ 11 std :: future沒有set_wait_callback,它允許用合作塊覆蓋阻塞實現。使用基於任務的調度程序組合std:future的唯一方法是承受ConcRT調度程序的Concurrency :: Oversubscribe(true)特性的開銷。我錯過了什麼?而對於WinRT,std :: future只會阻止win線程?這不是WinRT的工作原理,根據我的理解,它期望合作屏蔽。 – ronag

回答

1

Windows 8異步可能會通過PPL完成。你可以閱讀更多關於here

從我的理解來看,Windows 8和PPL使用基於任務的調度和協作阻塞。雖然std :: async和std :: future使用基於線程的調度和搶佔式阻塞。因此它們不兼容。

+1

'std :: future'在我看來像基於任務的調度。 –

+1

它可能看起來像那樣。但是它的所有阻塞函數都是非合作的,我認爲它不適合基於任務的調度程序。 – ronag