Bagikan melalui


Fungsi <future>

async
future_category
make_error_code
make_error_condition
swap|

async

Mewakili penyedia asinkron.

template <class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>
    async(Fn&& fn, ArgTypes&&... args);

template <class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>
    async(launch policy, Fn&& fn, ArgTypes&&... args);

Parameter

policy
Nilai launch.

Keterangan

Definisi singkatan:

Singkatan Deskripsi
dfn Hasil panggilan decay_copy(forward<Fn>(fn)).
dargs Hasil panggilan decay_copy(forward<ArgsTypes>(args...)).
Ty Jenis result_of<Fn(ArgTypes...)>::type.

Fungsi templat pertama mengembalikan async(launch::any, fn, args...).

Fungsi kedua mengembalikan objek yang status asinkron terkaitnya menyimpan hasil bersama dengan nilai dfn dan dargs dan objek utas future<Ty> untuk mengelola utas eksekusi terpisah.

Kecuali decay<Fn>::type merupakan jenis selain peluncuran, fungsi kedua tidak berpartisipasi dalam resolusi kelebihan beban.

Standar C++ menyatakan bahwa jika kebijakan adalah launch::async, fungsi berperilaku seolah-olah memanggil objek yang dapat dipanggil di utas baru. Ini berarti bahwa meskipun biasanya menghasilkan pembuatan utas baru, implementasinya dapat menggunakan mekanisme lain untuk mencapai perilaku yang setara. Namun, implementasi Microsoft saat ini tidak sesuai secara ketat dengan perilaku ini. Ini mendapatkan utas dari Windows ThreadPool, yang dapat menyediakan utas daur ulang daripada yang baru. Ini berarti bahwa launch::async kebijakan diterapkan secara efektif sebagai launch::async|launch::deferred. Implikasi lain dari implementasi berbasis ThreadPool adalah bahwa tidak ada jaminan bahwa variabel thread-local dihancurkan ketika utas selesai. Jika utas didaur ulang dan disediakan untuk panggilan baru ke async, variabel lama masih ada. Kami menyarankan agar Anda menghindari penggunaan variabel thread-local dengan async.

Jika policy adalah launch::deferred, fungsi menandai status asinkron terkait sebagai menahan fungsi yang ditangguhkan dan mengembalikan. Panggilan pertama ke fungsi non-waktu yang menunggu status asinkron terkait siap berlaku memanggil fungsi yang ditangguhkan dengan mengevaluasi INVOKE(dfn, dargs..., Ty).

Dalam semua kasus, status asinkron terkait dari future objek tidak diatur ke siap sampai evaluasi INVOKE(dfn, dargs..., Ty) selesai, baik dengan melempar pengecualian atau dengan kembali secara normal. Hasil dari status asinkron terkait adalah pengecualian jika satu dilemparkan, atau nilai yang dikembalikan evaluasi.

Catatan

Untuk — futureatau yang terakhir shared_future—yang dilampirkan ke tugas yang dimulai dengan std::async, destruktor memblokir jika tugas belum selesai; artinya, ia memblokir jika utas ini belum memanggil .get() atau .wait() dan tugas masih berjalan. Jika diperoleh future dari std::async dipindahkan ke luar cakupan lokal, kode lain yang menggunakannya harus menyadari bahwa destruktornya dapat memblokir status bersama agar siap.

Fungsi pseudo INVOKE didefinisikan dalam <functional>.

Khusus Microsoft

Ketika fungsi yang diteruskan dijalankan secara asinkron, fungsi dijalankan pada Kumpulan Utas Windows. Untuk informasi selengkapnya, lihat Kumpulan Utas. Jumlah utas bersamaan terbatas pada default kumpulan utas, yaitu 500 utas.

Sebelum Windows 11 dan Windows Server 2022, aplikasi dibatasi secara default ke satu grup prosesor yang memiliki paling banyak 64 prosesor logis. Ini membatasi jumlah utas yang dieksekusi secara bersamaan menjadi 64. Untuk informasi selengkapnya, lihat Grup Prosesor.

Dimulai dengan Windows 11 dan Windows Server 2022, proses dan utasnya memiliki afinitas prosesor yang secara default mencakup semua prosesor dalam sistem dan di beberapa grup pada komputer dengan lebih dari 64 prosesor. Batas jumlah utas bersamaan sekarang adalah jumlah total prosesor logis dalam sistem.

future_category

Mengembalikan referensi ke error_category objek yang mencirikan kesalahan yang terkait dengan future objek.

const error_category& future_category() noexcept;

make_error_code

Membuat error_code bersama dengan objek error_category yang mencirikan kesalahan di masa mendatang.

inline error_code make_error_code(future_errc Errno) noexcept;

Parameter

Errno
Nilai future_errc yang mengidentifikasi kesalahan yang dilaporkan.

Tampilkan Nilai

error_code(static_cast<int>(Errno), future_category());

make_error_condition

Membuat bersama error_condition dengan error_category objek yang mencirikan future kesalahan.

inline error_condition make_error_condition(future_errc Errno) noexcept;

Parameter

Errno
Nilai future_errc yang mengidentifikasi kesalahan yang dilaporkan.

Tampilkan Nilai

error_condition(static_cast<int>(Errno), future_category());

swap

Menukar status asinkron terkait dari satu promise objek dengan objek lainnya.

template <class Ty>
void swap(promise<Ty>& Left, promise<Ty>& Right) noexcept;

template <class Ty, class... ArgTypes>
void swap(packaged_task<Ty(ArgTypes...)>& Left, packaged_task<Ty(ArgTypes...)>& Right) noexcept;

Parameter

Left
Objek kiri promise .

Right
Objek yang tepat promise .

Lihat juga

<future>