我一直在寫一些JavaScript,而我喜歡的關於環境的少數幾件事情之一就是它使用promises/futures來爲異步事件製作處理程序。C++期貨/承諾像JavaScript?
在C++中,你必須調用.get一個未來,它會阻塞,直到未來的結果可用,但在Javascript中,你可以編寫.then(fn),並在結果準備好時調用函數。至關重要的是,它在稍後的調用者的同一線程中執行此操作,所以不需要擔心線程同步問題,至少與C++中的問題不一樣。
我想在C++類似 -
auto fut = asyncImageLoader("cat.jpg");
fut.then([](Image img) { std::cout << "Image is now loaded\n" << image; });
有沒有辦法在C來實現這一++?顯然它需要某種事件隊列和事件循環來處理調用回調。我最終可能會編寫代碼來完成大部分工作,但希望看看是否有任何方法可以使用標準工具輕鬆實現目標。
不完全重複,但密切相關:http://stackoverflow.com/questions/14489935/implementing-futurethen-equivalent-for-asynchronous-execution-in-c11 –
對,不是很重複,但有趣的是: )出於某種原因,我的搜索沒有找到那個。 – jcoder
「重要的是它[javascript]在同一個線程中執行此操作」。通常涉及兩個線程; (i)創建延遲的線程和附加的異步處理程序,(ii)延遲被執行或拒絕的線程以及異步處理程序被執行。鑑於(a)處理者不一定需要與延期創建時相同的線程中,(b)進度事件也可以被處理,並且(c)被延遲的人可以在其完成/被拒絕後繼續生存 - 那麼任何數量的更多線程也可能被涉及。 –