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.
Kelas ini structured_task_group mewakili kumpulan pekerjaan paralel yang sangat terstruktur. Anda dapat mengantrekan tugas-tugas paralel individual pada structured_task_group dengan menggunakan objek task_handle, dan menunggu hingga selesai, atau membatalkan grup tugas sebelum selesai dieksekusi, yang akan membatalkan semua tugas yang belum mulai dieksekusi.
Sintaks
class structured_task_group;
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
| kelompok_tugas_terstruktur | Kelebihan beban. Membuat objek baru structured_task_group . |
| ~structured_task_group Destructor | Menghancurkan objek structured_task_group . Anda diharapkan untuk memanggil metode wait atau run_and_wait pada objek sebelum destruktor dijalankan, kecuali destruktor dijalankan sebagai akibat dari pembongkaran tumpukan akibat pengecualian. |
Metode Publik
| Nama | Deskripsi |
|---|---|
| batalkan | Berusaha sebaik mungkin untuk membatalkan sub-bagian pekerjaan yang berakar pada grup tugas ini. Setiap tugas yang dijadwalkan pada grup tugas akan dibatalkan secara transitif jika memungkinkan. |
| sedang_membatalkan | Menginformasikan pemanggil apakah kelompok tugas saat ini sedang mengalami pembatalan atau tidak. Ini tidak selalu menunjukkan bahwa metode cancel dipanggil pada objek structured_task_group (meskipun tindakan tersebut tentu memenuhi syarat untuk mengembalikan true). Mungkin saja objek structured_task_group mengeksekusi secara langsung dan grup tugas lebih tinggi di pohon kerja dibatalkan. Dalam kasus seperti ini di mana runtime dapat menentukan sebelumnya bahwa pembatalan akan mengalir melalui objek ini structured_task_group , true akan dikembalikan juga. |
| jalankan | Kelebihan beban. Menjadwalkan tugas pada structured_task_group objek. Pemanggil mengelola masa pakai objek task_handle yang diteruskan dalam parameter _Task_handle. Versi yang mengambil parameter _Placement menyebabkan tugas menjadi bias untuk dieksekusi di lokasi yang ditentukan oleh parameter tersebut. |
| run_and_wait | Kelebihan beban. Menjadwalkan tugas yang akan dijalankan langsung dalam konteks panggilan dengan bantuan objek structured_task_group untuk dukungan pembatalan secara penuh. Jika objek task_handle diteruskan sebagai parameter ke run_and_wait, pemanggil bertanggung jawab untuk mengelola siklus hidup objek task_handle. Fungsi kemudian menunggu hingga semua pekerjaan pada structured_task_group objek telah selesai atau dibatalkan. |
| Tunggu | Menunggu hingga semua pekerjaan pada structured_task_group telah selesai atau dibatalkan. |
Keterangan
Ada sejumlah pembatasan ketat yang ditempatkan pada penggunaan structured_task_group objek demi mendapatkan performa.
Satu
structured_task_groupobjek tidak dapat digunakan oleh beberapa utas. Semua operasi pada objekstructured_task_groupharus dilakukan oleh utas yang membuat objek tersebut. Dua pengecualian untuk aturan ini adalah fungsi anggotacanceldanis_canceling. Objek mungkin tidak berada dalam daftar pengambilan ekspresi lambda dan digunakan dalam tugas, kecuali tugas menggunakan salah satu operasi pembatalan.Semua tugas yang dijadwalkan ke
structured_task_groupobjek dijadwalkan melalui penggunaantask_handleobjek yang harus Anda kelola secara eksplisit masa pakainya.Beberapa grup hanya dapat digunakan dalam urutan yang benar-benar bersarang secara hierarkis. Jika dua
structured_task_groupobjek dideklarasikan, objek kedua yang dinyatakan (yang dalam) harus dihancurkan sebelum metode apa pun kecualicancelatauis_cancelingdipanggil pada yang pertama (yang luar). Kondisi ini berlaku baik dalam kasus hanya sekadar mendeklarasikan beberapastructured_task_groupobjek dalam cakupan yang sama atau bersarang secara fungsional, maupun dalam kasus tugas yang diantrekan kestructured_task_groupmelalui metoderunataurun_and_wait.Tidak seperti kelas umum
task_group, semua negara bagian distructured_task_groupkelas bersifat final. Setelah Anda mengantrekan tugas ke grup dan menunggu tugas selesai, Anda mungkin tidak menggunakan grup yang sama lagi.
Untuk informasi selengkapnya, lihat Paralelisme Tugas.
Hierarki Pewarisan
structured_task_group
Persyaratan
Header: ppl.h
Namespace: konkurensi
batalkan
Berusaha sebaik mungkin untuk membatalkan sub-bagian pekerjaan yang berakar pada grup tugas ini. Setiap tugas yang dijadwalkan pada grup tugas akan dibatalkan secara transitif jika memungkinkan.
void cancel();
Keterangan
Untuk informasi selengkapnya, lihat Pembatalan.
sedang membatalkan
Menginformasikan pemanggil apakah kelompok tugas saat ini sedang mengalami pembatalan atau tidak. Ini tidak selalu menunjukkan bahwa metode cancel dipanggil pada objek structured_task_group (meskipun tindakan tersebut tentu memenuhi syarat untuk mengembalikan true). Mungkin saja objek structured_task_group mengeksekusi secara langsung dan grup tugas lebih tinggi di pohon kerja dibatalkan. Dalam kasus seperti ini di mana runtime dapat menentukan sebelumnya bahwa pembatalan akan mengalir melalui objek ini structured_task_group , true akan dikembalikan juga.
bool is_canceling();
Tampilkan Nilai
Indikasi apakah objek structured_task_group sedang dalam proses pembatalan (atau dipastikan akan segera dibatalkan).
Keterangan
Untuk informasi selengkapnya, lihat Pembatalan.
eksekusi
Menjadwalkan tugas pada structured_task_group objek. Pemanggil mengelola masa pakai objek task_handle yang diteruskan dalam parameter _Task_handle. Versi yang mengambil parameter _Placement menyebabkan tugas menjadi bias untuk dieksekusi di lokasi yang ditentukan oleh parameter tersebut.
template<class _Function>
void run(
task_handle<_Function>& _Task_handle);
template<class _Function>
void run(
task_handle<_Function>& _Task_handle,
location& _Placement);
Parameter
_Fungsi
Jenis objek fungsi yang akan dipanggil untuk mengeksekusi isi dari penanganan tugas.
_Task_handle
Sebuah pegangan untuk pekerjaan yang dijadwalkan. Perhatikan bahwa penelepon memiliki tanggung jawab atas masa pakai objek ini. Runtime akan terus mengharapkan objek structured_task_group ini tetap hidup sampai salah satu dari metode wait atau run_and_wait telah dipanggil.
_Penempatan
Referensi ke lokasi di mana tugas yang diwakili oleh parameter _Task_handle harus dijalankan.
Keterangan
Runtime membuat salinan fungsi kerja yang Anda teruskan ke metode ini. Setiap perubahan status yang terjadi dalam objek fungsi yang Anda teruskan ke metode ini tidak akan muncul di salinan objek fungsi tersebut.
Jika structured_task_group dihapus sebagai hasil dari stack unwinding akibat pengecualian, Anda tidak perlu memastikan bahwa panggilan telah dilakukan ke metode wait atau run_and_wait. Dalam hal ini, destruktor akan dengan tepat membatalkan dan menunggu tugas yang diwakili oleh parameter _Task_handle hingga selesai.
Melemparkan pengecualian invalid_multiple_scheduling jika handel tugas yang diberikan oleh _Task_handle parameter telah dijadwalkan ke suatu objek grup tugas melalui metode run dan belum ada panggilan intervensi ke metode wait atau run_and_wait pada grup tugas tersebut.
run_and_wait
Menjadwalkan tugas yang akan dijalankan langsung dalam konteks panggilan dengan bantuan objek structured_task_group untuk dukungan pembatalan secara penuh. Jika objek task_handle diteruskan sebagai parameter ke run_and_wait, pemanggil bertanggung jawab untuk mengelola siklus hidup objek task_handle. Fungsi kemudian menunggu hingga semua pekerjaan pada structured_task_group objek telah selesai atau dibatalkan.
template<class _Function>
task_group_status run_and_wait(task_handle<_Function>& _Task_handle);
template<class _Function>
task_group_status run_and_wait(const _Function& _Func);
Parameter
_Fungsi
Jenis objek fungsi yang akan dipanggil untuk menjalankan tugas.
_Task_handle
Pegangan ke tugas yang akan dijalankan secara langsung dalam konteks pemanggilan. Perhatikan bahwa penelepon memiliki tanggung jawab atas masa pakai objek ini. Runtime akan terus mengharapkannya hidup sampai metode run_and_wait selesai dieksekusi.
_Func
Fungsi yang akan dipanggil untuk memanggil isi pekerjaan. Ini mungkin lambda atau objek lain yang mendukung versi operator panggilan fungsi dengan tanda tangan void operator()().
Tampilkan Nilai
Indikasi apakah penantian terpenuhi atau grup tugas dibatalkan, karena operasi pembatalan eksplisit atau pengecualian dilemparkan dari salah satu tugasnya. Untuk informasi selengkapnya, lihat task_group_status
Keterangan
Perhatikan bahwa satu atau beberapa tugas yang dijadwalkan ke objek ini structured_task_group dapat dijalankan secara langsung dalam konteks pemanggilan.
Jika satu atau beberapa tugas yang dijadwalkan ke objek ini structured_task_group memunculkan pengecualian, runtime akan memilih satu pengecualian tersebut untuk dipropagasikan dan menyebarkannya keluar pada metode run_and_wait.
Setelah fungsi ini kembali, structured_task_group objek dipertimbangkan dalam status akhir dan tidak boleh digunakan. Perhatikan bahwa penggunaan setelah metode run_and_wait kembali akan mengakibatkan perilaku yang tidak terdefinisi.
Dalam jalur eksekusi yang normal, Anda diharuskan untuk memanggil metode ini atau metode wait sebelum destruktor structured_task_group dieksekusi.
kelompok_tugas_terstruktur
Membuat objek baru structured_task_group .
structured_task_group();
structured_task_group(cancellation_token _CancellationToken);
Parameter
_CancellationToken
Token pembatalan untuk dikaitkan dengan grup tugas terstruktur ini. Grup tugas terstruktur akan dibatalkan ketika token dibatalkan.
Keterangan
Konstruktor yang menerima token pembatalan membuat structured_task_group yang akan dibatalkan ketika sumber yang terkait dengan token tersebut dibatalkan. Menyediakan token pembatalan eksplisit juga mengisolasi grup tugas terstruktur ini agar tidak berpartisipasi dalam pembatalan implisit dari grup induk dengan token yang berbeda atau tanpa token.
~kelompok_tugas_terstruktur
Menghancurkan objek structured_task_group . Anda diharapkan untuk memanggil metode wait atau run_and_wait pada objek sebelum destruktor dijalankan, kecuali destruktor dijalankan sebagai akibat dari pembongkaran tumpukan akibat pengecualian.
~structured_task_group();
Keterangan
Jika destruktor berjalan sebagai hasil dari eksekusi normal (misalnya, bukan pembongkaran stack karena pengecualian) dan baik metode wait maupun run_and_wait tidak dipanggil, destruktor dapat melemparkan pengecualian missing_wait.
tunggu
Menunggu hingga semua pekerjaan pada structured_task_group telah selesai atau dibatalkan.
task_group_status wait();
Tampilkan Nilai
Indikasi apakah penantian terpenuhi atau grup tugas dibatalkan, karena operasi pembatalan eksplisit atau pengecualian dilemparkan dari salah satu tugasnya. Untuk informasi selengkapnya, lihat task_group_status
Keterangan
Perhatikan bahwa satu atau beberapa tugas yang dijadwalkan ke objek ini structured_task_group dapat dijalankan secara langsung dalam konteks pemanggilan.
Jika satu atau beberapa tugas yang dijadwalkan ke objek ini structured_task_group memunculkan pengecualian, runtime akan memilih satu pengecualian tersebut untuk dipropagasikan dan menyebarkannya keluar pada metode wait.
Setelah fungsi ini kembali, structured_task_group objek dipertimbangkan dalam status akhir dan tidak boleh digunakan. Perhatikan bahwa pemanfaatan setelah metode wait mengembalikan akan mengakibatkan perilaku yang tidak terdefinisi.
Dalam jalur eksekusi yang normal, Anda diharuskan untuk memanggil metode ini atau metode run_and_wait sebelum destruktor structured_task_group dieksekusi.
Lihat juga
Namespace layanan konkurensi
Kelas task_group
task_handle Class