Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Fungsi
Header <future> menyediakan fungsi berikut:
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 future<Ty> asinkron terkaitnya menyimpan hasil bersama dengan nilai dan dfn dan objek utas dargs 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 .