Bagikan melalui


Kelas packaged_task

Menjelaskan penyedia asinkron yang merupakan pembungkus panggilan yang tanda tangan panggilannya adalah Ty(ArgTypes...). Status asinkron terkait menyimpan salinan objek yang dapat dipanggil selain hasil potensial.

Sintaks

template <class>
class packaged_task;

Anggota

Konstruktor Publik

Nama Deskripsi
packaged_task Membuat packaged_task objek.
packaged_task::~packaged_task Destructor Menghancurkan objek packaged_task .

Metode Publik

Nama Deskripsi
get_future Mengembalikan objek mendatang yang memiliki status asinkron terkait yang sama.
make_ready_at_thread_exit Memanggil objek yang dapat dipanggil yang disimpan dalam status asinkron terkait dan secara atomik menyimpan nilai yang dikembalikan.
Reset Menggantikan status asinkron terkait.
tukar Menukar status asinkron terkait dengan objek tertentu.
sah Menentukan apakah objek memiliki status asinkron terkait.

Operator Publik

Nama Deskripsi
packaged_task::operator= Mentransfer status asinkron terkait dari objek tertentu.
packaged_task::operator() Memanggil objek yang dapat dipanggil yang disimpan dalam status asinkron terkait, menyimpan nilai yang dikembalikan secara atomik, dan mengatur status ke siap.
packaged_task::operator bool Menentukan apakah objek memiliki status asinkron terkait.

Persyaratan

Header:<future>

Namespace: std

packaged_task::get_future

Mengembalikan objek jenis future<Ty> yang memiliki status asinkron terkait yang sama.

future<Ty> get_future();

Keterangan

packaged_task Jika objek tidak memiliki status asinkron terkait, metode ini akan melemparkan future_error yang memiliki kode no_statekesalahan .

Jika metode ini telah dipanggil untuk packaged_task objek yang memiliki status asinkron terkait yang sama, metode melemparkan future_error yang memiliki kode future_already_retrievedkesalahan .

packaged_task::make_ready_at_thread_exit

Memanggil objek yang dapat dipanggil yang disimpan dalam status asinkron terkait dan secara atomik menyimpan nilai yang dikembalikan.

void make_ready_at_thread_exit(ArgTypes... args);

Keterangan

packaged_task Jika objek tidak memiliki status asinkron terkait, metode ini akan melemparkan future_error yang memiliki kode no_statekesalahan .

Jika metode ini atau make_ready_at_thread_exit telah dipanggil untuk packaged_task objek yang memiliki status asinkron terkait yang sama, metode melemparkan future_error yang memiliki kode promise_already_satisfiedkesalahan .

Jika tidak, operator ini memanggil INVOKE(fn, args..., Ty), di mana fn adalah objek yang dapat dipanggil yang disimpan dalam status asinkron terkait. Setiap nilai yang dikembalikan disimpan secara atomik sebagai hasil yang dikembalikan dari status asinkron terkait.

Berbeda dengan packaged_task::operator(), status asinkron terkait tidak diatur ke ready sampai setelah semua objek thread-local dalam utas panggilan telah dihancurkan. Biasanya, utas yang diblokir pada status asinkron terkait tidak diblokir hingga utas panggilan keluar.

packaged_task::operator=

Mentransfer status asinkron terkait dari objek tertentu.

packaged_task& operator=(packaged_task&& Right);

Parameter

Kanan
Objek packaged_task.

Tampilkan Nilai

*this

Keterangan

Setelah operasi, Kanan tidak lagi memiliki status asinkron terkait.

packaged_task::operator()

Memanggil objek yang dapat dipanggil yang disimpan dalam status asinkron terkait, menyimpan nilai yang dikembalikan secara atomik, dan mengatur status ke siap.

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

Keterangan

packaged_task Jika objek tidak memiliki status asinkron terkait, metode ini akan melemparkan future_error yang memiliki kode no_statekesalahan .

Jika metode ini atau make_ready_at_thread_exit telah dipanggil untuk packaged_task objek yang memiliki status asinkron terkait yang sama, metode melemparkan future_error yang memiliki kode promise_already_satisfiedkesalahan .

Jika tidak, operator ini memanggil INVOKE(fn, args..., Ty), di mana fn adalah objek yang dapat dipanggil yang disimpan dalam status asinkron terkait. Setiap nilai yang dikembalikan disimpan secara atomik sebagai hasil yang dikembalikan dari status asinkron terkait, dan status diatur ke siap. Akibatnya, setiap utas yang diblokir pada status asinkron terkait menjadi tidak diblokir.

packaged_task::operator bool

Menentukan apakah objek memiliki associated asynchronous state.

operator bool() const noexcept;

Tampilkan Nilai

true jika objek memiliki status asinkron terkait; jika tidak, false.

packaged_task::p ackaged_task Constructor

Membuat packaged_task objek.

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);

Parameter

Kanan
Objek packaged_task.

alokasi
Alokator memori. Untuk informasi selengkapnya, lihat alokator>.<

Fn
Objek fungsi.

Keterangan

Konstruktor pertama membangun packaged_task objek yang tidak memiliki status asinkron terkait.

Konstruktor kedua membangun packaged_task objek dan mentransfer status asinkron terkait dari Kanan. Setelah operasi, Kanan tidak lagi memiliki status asinkron terkait.

Konstruktor ketiga membuat packaged_task objek yang memiliki salinan fn yang disimpan dalam status asinkron terkait.

Konstruktor keempat membuat packaged_task objek yang memiliki salinan fn yang disimpan dalam status asinkron terkait, dan menggunakan alloc untuk alokasi memori.

packaged_task::~packaged_task Destructor

Menghancurkan objek packaged_task .

~packaged_task();

Keterangan

Jika status asinkron terkait belum siap, destruktor menyimpan pengecualian future_error yang memiliki kode broken_promise kesalahan sebagai akibatnya dalam status asinkron terkait, dan utas apa pun yang diblokir pada status asinkron terkait menjadi tidak diblokir.

packaged_task::reset

Menggunakan status asinkron terkait baru untuk menggantikan status asinkron terkait yang ada.

void reset();

Keterangan

Akibatnya, metode ini menjalankan *this = packaged_task(move(fn)), di mana fn adalah objek fungsi yang disimpan dalam status asinkron terkait untuk objek ini. Oleh karena itu, status objek dibersihkan, dan get_future, operator(), dan make_ready_at_thread_exit dapat dipanggil seolah-olah pada objek yang baru dibangun.

packaged_task::swap

Menukar status asinkron terkait dengan objek tertentu.

void swap(packaged_task& Right) noexcept;

Parameter

Kanan
Objek packaged_task.

packaged_task::valid

Menentukan apakah objek memiliki associated asynchronous state.

bool valid() const;

Tampilkan Nilai

true jika objek memiliki status asinkron terkait; jika tidak, false.

Lihat juga

Referensi File Header
<masa depan>