建議使用 Visual Studio 2017

packaged_task 類別

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

描述非同步提供者也就是呼叫包裝函式呼叫簽名碼Ty(ArgTypes...)。 其相關聯的非同步狀態持有除了潛在的結果可呼叫物件的複本。

template <class>
class packaged_task;

公用建構函式

名稱說明
packaged_task:: packaged_task 建構函式建構 packaged_task 物件。
packaged_task:: ~ packaged_task 解構函式終結 packaged_task 物件。

公用方法

名稱說明
packaged_task:: get_future 方法傳回未來具有相同的物件相關聯的非同步狀態。
packaged_task:: make_ready_at_thread_exit 方法呼叫的可呼叫的物件,會儲存在相關聯的非同步狀態,並自動將傳回的值。
packaged_task:: reset 方法取代相關聯的非同步狀態。
packaged_task:: swap 方法交換關聯的非同步狀態與指定的物件。
packaged_task:: valid 方法指定物件是否具有關聯的非同步狀態。

公用運算子

名稱描述
packaged_task:: operator =會將從指定的物件關聯的非同步狀態。
packaged_task::operator()呼叫的可呼叫的物件,會儲存在相關聯的非同步狀態,以不可分割方式儲存傳回的值,並將狀態設定為準備
packaged_task:: operator bool指定物件是否具有關聯的非同步狀態。

標頭︰未來

命名空間: std

傳回型別的物件future<Ty>,具有相同的相關聯的非同步狀態

future<Ty> get_future();

備註

如果packaged_task物件沒有相關聯的非同步狀態,這個方法會擲回future_error有錯誤碼的no_state

如果已針對呼叫這個方法packaged_task具有相同的物件相關聯的非同步狀態,此方法會擲回future_error有錯誤碼的future_already_retrieved

呼叫會儲存在可呼叫物件相關聯的非同步狀態,並自動將傳回的值。

void make_ready_at_thread_exit(ArgTypes... args);

備註

如果packaged_task物件沒有相關聯的非同步狀態,這個方法會擲回future_error有錯誤碼的no_state

如果此方法或make_ready_at_thread_exit已經針對呼叫packaged_task具有相同的物件相關聯的非同步狀態,此方法會擲回future_error有錯誤碼的promise_already_satisfied

否則,此運算子會呼叫INVOKE(fn, args..., Ty),其中fn是儲存在相關聯的非同步狀態的可呼叫物件。 傳回的值會自動儲存為關聯的非同步狀態傳回結果。

相對於packaged_task::operator(),關聯的非同步狀態未設定為ready之前在呼叫的執行緒在所有執行緒區域物件已終結。 通常,被封鎖於關聯非同步狀態的執行緒不會封鎖呼叫執行緒結束前。

傳輸相關聯的非同步狀態從指定的物件。

packaged_task& operator=(packaged_task&& Right);

參數

Right
packaged_task 物件。

傳回值

*this

備註

在作業完成後,Right 不再具有相關聯的非同步狀態。

呼叫會儲存在可呼叫物件相關聯的非同步狀態、 以不可分割方式儲存傳回的值,並將狀態設定為準備

void operator()(ArgTypes... args);

備註

如果packaged_task物件沒有相關聯的非同步狀態,這個方法會擲回future_error有錯誤碼的no_state

如果此方法或make_ready_at_thread_exit已經針對呼叫packaged_task具有相同的物件相關聯的非同步狀態,此方法會擲回future_error有錯誤碼的promise_already_satisfied

否則,此運算子會呼叫INVOKE(fn, args..., Ty),其中fn是儲存在相關聯的非同步狀態的可呼叫物件。 任何傳回值會自動儲存為傳回的結果相關聯的非同步狀態,且狀態會設為 [可。 如此一來,任何被封鎖於關聯非同步狀態的執行緒會變成解除封鎖。

指定物件是否具有associated asynchronous state

'' cppoperator bool() const noexcept;

  
### Return Value  
 `true` if the object has an associated asynchronous state; otherwise, `false`.  
  
##  <a name="packaged_task__packaged_task_constructor"></a>  packaged_task::packaged_task Constructor  
 Constructs a `packaged_task` object.  
  
```cpp
packaged_task() noexcept;
packaged_task(packaged_task&& Right) noexcept;
template <class Fn>
explicit packaged_task(Fn&& fn);

template <class Fn, class Alloc>
explicit packaged_task(allocator_arg_t,
    const Alloc& alloc, Fn&& fn);

參數

Right
packaged_task 物件。

alloc
記憶體配置器。 如需詳細資訊,請參閱 <> </> >

fn
函式物件。

備註

第一個建構函式建構packaged_task物件沒有相關聯的非同步狀態

第二個建構函式建構 packaged_task 物件並從 Right 中轉移關聯的非同步狀態。 在作業完成後,Right 不再具有相關聯的非同步狀態。

第三個建構函式建構 packaged_task 物件,其 fn 複本儲存在其相關的非同步狀態中。

第四個建構函式建構 packaged_task 物件,其 fn 複本儲存在其相關的非同步狀態中,並使用 alloc 供記憶體配置。

終結 packaged_task 物件。

~packaged_task();

備註

如果相關聯的非同步狀態準備,解構函式存放區future_error有錯誤碼的例外狀況,broken_promise做為關聯的非同步狀態,並被封鎖於關聯非同步狀態會變成解除封鎖任何執行緒中的結果。

使用新相關聯的非同步狀態取代現有關聯的非同步狀態。

void reset();

備註

實際上,這個方法會執行*this = packaged_task(move(fn)),其中fn是儲存在此物件相關聯的非同步狀態的函式物件。 因此,會清除物件的狀態,以及get_futureoperator (),和make_ready_at_thread_exit可以如同在新建構的物件上呼叫。

交換關聯的非同步狀態與指定的物件。

void swap(packaged_task& Right) noexcept;

參數

Right
packaged_task 物件。

指定物件是否具有associated asynchronous state

bool valid() const;

傳回值

如果物件有關聯的非同步狀態,就是 true,否則為 false

標頭檔參考
<>>

顯示: