<future>
包含標準標頭 <未來> ,以定義類別範本和支援可簡化在個別線程中執行函式的範本,以及擷取其結果。 結果會是函式所傳回的值,或是函式所發出但未在函式中攔截到的例外狀況。
此標頭使用並行執行階段 (ConcRT),因此您可以搭配使用其他 ConcRT 機制。 如需有關 ConcRT 的詳細資訊,請參閱並行執行階段。
語法
#include <future>
備註
注意
在使用 /clr 編譯的程序代碼中,會封鎖此標頭。
「非同步提供者」會儲存函式呼叫的結果。 「非同步傳回物件」可用來擷取函式呼叫的結果。 「相關非同步狀態」可提供非同步提供者與一或多個非同步傳回物件之間的通訊。
程式不會直接建立任何相關非同步狀態物件。 程式會在每當需要非同步提供者時便建立一個,然後從該提供者建立非同步傳回物件,以將其相關非同步狀態與提供者共用。 非同步提供者和非同步傳回物件會管理保存其共用相關非同步狀態的物件。 當最後一個參考相關非同步狀態的物件釋出它,系統就會終結保存相關非同步狀態的物件。
沒有相關非同步狀態的非同步提供者或非同步傳回物件會是「空的」。
只有在非同步提供者儲存了傳回值或儲存了例外狀況之後,相關聯的非同步狀態才會「就緒」。
範本函式 async
和類別範本 promise
,而且 packaged_task
是異步提供者。 類別範本 future
並 shared_future
描述異步傳回物件。
每個類別範本 promise
、 future
和 shared_future
都有類型的 void
特製化,以及用來依傳址儲存和擷取值的部分特製化。 這些特製化與主要範本只有在儲存和擷取傳回值的函式簽章及語意上有差異。
類別範本future
和shared_future
永不在其解構函式中封鎖,但有一個為了回溯相容性而保留的情況除外:不同於所有其他未來、附加至以 開頭std::async
的工作,future
shared_future
解構函式會封鎖工作尚未完成,也就是說,如果此線程尚未呼叫.get()
或.wait()
且工作仍在執行,則會封鎖。 下列可用性注意事項已新增至草稿標準中的 描述 std::async
:「[注意:如果從 std::async 取得的未來已移至本機範圍之外,則使用未來的其他程式代碼必須注意,未來解構函式可能會封鎖共享狀態變成就緒。—結束附注]「在其他所有情況下, future
和 shared_future
解構函式是必要的,而且保證永遠不會封鎖。
成員
類別
名稱 | 描述 |
---|---|
future 類別 | 描述「非同步傳回物件」。 |
future_error 類別 | 描述可由管理 future 物件之類型的方法擲回的例外狀況物件。 |
packaged_task 類別 | 描述作為呼叫包裝函式且呼叫簽章為 Ty(ArgTypes...) 的非同步提供者。 除了可能的結果外,它的「相關聯非同步狀態」會保存其可呼叫物件的複本。 |
promise 類別 | 描述「非同步提供者」。 |
shared_future 類別 | 描述「非同步傳回物件」。 與 future 物件對比,非同步提供者可以與任意數目的 shared_future 物件相關聯。 |
結構
名稱 | 描述 |
---|---|
is_error_code_enum 結構 | 指出 future_errc 適用於儲存 error_code 的特製化。 |
uses_allocator 結構 | 永遠成立的特製化。 |
函式
名稱 | 描述 |
---|---|
async | 代表非同步提供者。 |
future_category | 傳回對 error_category 物件的參考,此物件會描述 future 物件之相關錯誤的特性。 |
make_error_code | 建立具有 error_category 物件的 error_code ,該物件會描述 future 錯誤的特性。 |
make_error_condition | 建立具有 error_category 物件的 error_condition ,該物件會描述 future 錯誤的特性。 |
swap | 將一個 promise 物件的「相關非同步狀態」與另一個物件的該狀態交換。 |
列舉
名稱 | 描述 |
---|---|
future_errc | 為 future_error 類別所回報的錯誤提供符號名稱。 |
future_status | 為計時的 wait 函式可傳回的原因提供符號名稱。 |
發射 | 代表一種位元遮罩類型,描述範本函式 async 可能的模式。 |