共用方式為


packaged_task 類別

描述「非同步提供者」,它是呼叫簽章為 Ty(ArgTypes...) 的呼叫包裝函式。 除了可能的結果外,它的「相關聯非同步狀態」會保存其可呼叫物件的複本。

語法

template <class>
class packaged_task;

成員

公用建構函式

名稱 描述
packaged_task 建構 packaged_task 物件。
packaged_task::~packaged_task 解構函式 終結 packaged_task 物件。

公用方法

名稱 描述
get_future 傳回 future 物件,該物件具有相同的相關聯非同步狀態。
make_ready_at_thread_exit 呼叫儲存在「相關聯非同步狀態」中的可呼叫物件,並以不可部分完成的方式儲存傳回的值。
reset 取代相關聯的非同步狀態。
swap 使用指定的物件交換相關聯的異步狀態。
有效 指定物件是否具有「相關聯的非同步狀態」。

公用運算子

名稱 描述
packaged_task::operator= 從指定的物件轉移「相關聯的非同步狀態」。
packaged_task::operator() 呼叫儲存在相關聯非同步狀態中的可呼叫物件,以不可部分完成的方式儲存傳回的值,並將狀態設定為「就緒」
packaged_task::operator bool 指定物件是否具有「相關聯的非同步狀態」。

需求

標頭:<future>

命名空間:std

packaged_task::get_future

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

future<Ty> get_future();

備註

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

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

packaged_task::make_ready_at_thread_exit

呼叫儲存在「相關聯非同步狀態」中的可呼叫物件,並以不可部分完成的方式儲存傳回的值。

void make_ready_at_thread_exit(ArgTypes... args);

備註

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

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

否則,此運算子會呼叫 INVOKE(fn, args..., Ty),其中 fn 是儲存在相關聯非同步狀態中的可呼叫物件。 任何傳回的值會以不可部分完成的方式儲存為相關聯非同步狀態的傳回結果。

與 packaged_task::operator()相反地,在呼叫線程中的所有線程區域對象終結之後,才會將相關聯的異步狀態設定ready為 。 一般而言,在呼叫線程結束時,在相關聯的異步狀態上封鎖的線程不會解除封鎖。

packaged_task::operator=

從指定的物件轉移「相關聯的非同步狀態」

packaged_task& operator=(packaged_task&& Right);

參數

Right
packaged_task 物件。

傳回值

*this

備註

作業之後, Right 不再具有相關聯的異步狀態。

packaged_task::operator()

呼叫儲存在「相關聯非同步狀態」中的可呼叫物件,以不可部分完成的方式儲存傳回的值,並將狀態設定為「就緒」

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

備註

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

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

否則,此運算子會呼叫 INVOKE(fn, args..., Ty),其中 fn 是儲存在相關聯非同步狀態中的可呼叫物件。 任何傳回的值會以不可部分完成的方式儲存為相關聯非同步狀態的傳回結果,並將狀態設為就緒。 如此一來,封鎖於相關聯非同步狀態上的所有執行緒都會解除封鎖。

packaged_task::operator bool

指定物件是否具有 associated asynchronous state

operator bool() const noexcept;

傳回值

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

packaged_task::packaged_task 建構函式

建構 packaged_task 物件。

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 解構函式

終結 packaged_task 物件。

~packaged_task();

備註

如果相關聯的異步狀態尚未就緒,解構函式會儲存future_error例外狀況,其錯誤碼會因為相關聯的異步狀態而造成錯誤碼broken_promise,而相關聯異步狀態上封鎖的任何線程會解除封鎖。

packaged_task::reset

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

void reset();

備註

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

packaged_task::swap

使用指定的物件交換相關聯的異步狀態。

void swap(packaged_task& Right) noexcept;

參數

Right
packaged_task 物件。

packaged_task::valid

指定物件是否具有 associated asynchronous state

bool valid() const;

傳回值

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

另請參閱

標頭檔參考
<future>