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.
Abstraksi untuk utas eksekusi. Bergantung pada kunci kebijakan penjadwal SchedulerType yang Anda buat, Resource Manager akan memberi Anda proksi utas yang didukung oleh utas Win32 biasa atau utas User-Mode Schedulable (UMS). Utas UMS didukung pada sistem operasi 64-bit dengan versi Windows 7 dan yang lebih tinggi.
Sintaks
struct IThreadProxy;
Anggota
Metode Publik
| Nama | Deskripsi |
|---|---|
| IThreadProxy::GetId | Mengembalikan ID unik untuk proksi utas. |
| IThreadProxy::SwitchOut | Memisahkan konteks dari akar prosesor virtual yang mendasar. |
| IThreadProxy::SwitchTo | Melakukan peralihan konteks kooperatif dari konteks yang saat ini dijalankan ke konteks yang berbeda. |
| IThreadProxy::YieldToSystem | Menyebabkan thread yang memanggil memberikan giliran eksekusi kepada thread lain yang siap dijalankan pada prosesor saat ini. Sistem operasi memilih utas berikutnya yang akan dijalankan. |
Keterangan
Proksi thread digabungkan dengan konteks eksekusi yang diwakili oleh antarmuka IExecutionContext sebagai sarana pendistribusian tugas.
Hierarki Pewarisan
IThreadProxy
Persyaratan
Header: concrtrm.h
Namespace: konkurensi
Metode IThreadProxy::GetId
Mengembalikan pengidentifikasi unik untuk utas proksi.
virtual unsigned int GetId() const = 0;
Tampilkan Nilai
Pengidentifikasi bilangan bulat yang unik.
IThreadProxy::SwitchOut Method
Memisahkan konteks dari akar prosesor virtual yang mendasar.
virtual void SwitchOut(SwitchingProxyState switchState = Blocking) = 0;
Parameter
switchState
Menunjukkan keadaan proksi utas yang mengoperasikan sakelar. Parameternya berjenis SwitchingProxyState.
Keterangan
Gunakan SwitchOut jika Anda perlu memisahkan konteks dari akar prosesor virtual yang dijalankannya, karena alasan apa pun. Bergantung pada nilai yang Anda berikan ke parameter switchState, dan apakah itu dijalankan pada akar prosesor virtual atau tidak, panggilan akan segera kembali atau memblokir proksi utas yang terkait dengan konteks. Ini adalah kesalahan untuk memanggil SwitchOut dengan parameter yang diatur ke Idle. Melakukannya akan menghasilkan pengecualian invalid_argument .
SwitchOut berguna ketika Anda ingin mengurangi jumlah inti prosesor virtual yang dimiliki penjadwal Anda, baik karena Resource Manager telah menginstruksikan Anda untuk melakukannya, atau karena Anda meminta inti prosesor virtual oversubscribed sementara, dan Anda sudah selesai dengan itu. Dalam hal ini Anda harus memanggil metode IVirtualProcessorRoot::Remove pada root prosesor virtual, sebelum melakukan panggilan ke SwitchOut dengan parameter switchState yang diatur ke Blocking. Ini akan memblokir proksi thread dan akan melanjutkan eksekusi ketika root prosesor virtual yang berbeda di penjadwal tersedia untuk mengeksekusinya. Proksi thread blokir dapat dilanjutkan dengan memanggil fungsi SwitchTo untuk beralih ke konteks eksekusi proksi thread ini. Anda juga dapat melanjutkan proksi thread, dengan menggunakan konteks terkait untuk mengaktifkan root prosesor virtual. Untuk informasi selengkapnya tentang cara melakukannya, lihat IVirtualProcessorRoot::Activate.
SwitchOut juga dapat digunakan ketika Anda ingin menginisialisasi ulang prosesor virtual, sehingga dapat diaktifkan di masa mendatang, baik dengan memblokir proksi utas atau melepaskannya sementara dari akar prosesor virtual yang dijalankannya, ataupun dari penjadwal tempat ia mengirimkan pekerjaan. Gunakan SwitchOut dengan parameter switchState yang disetel ke Blocking jika Anda ingin memblokir proxy thread. Ini nantinya dapat dilanjutkan menggunakan salah satu dari SwitchTo atau IVirtualProcessorRoot::Activate seperti yang disebutkan di atas. Gunakan SwitchOut dengan parameter yang diatur ke Nesting ketika Anda ingin sementara melepaskan proxy thread ini dari root prosesor virtual yang sedang dijalankan, serta penjadwal yang terkait dengan prosesor virtual tersebut. Memanggil SwitchOut dengan parameter switchState yang diatur ke Nesting saat dijalankan pada akar prosesor virtual akan menyebabkan akar diinisialisasi ulang dan proksi utas saat ini akan terus dieksekusi tanpa perlu inisialisasi baru. Proksi utas dianggap telah meninggalkan penjadwal sampai memanggil metode IThreadProxy::SwitchOut dengan Blocking di lain waktu. Panggilan kedua ke SwitchOut dengan parameter yang diatur ke Blocking dimaksudkan untuk mengembalikan konteks ke status diblokir sehingga dapat dilanjutkan oleh SwitchTo atau IVirtualProcessorRoot::Activate di penjadwal yang dilepaskannya. Karena tidak dijalankan pada akar prosesor virtual, tidak ada reinisialisasi yang terjadi.
Akar prosesor virtual yang diinisialisasi ulang tidak berbeda dari akar prosesor virtual baru yang diberikan penjadwal Anda oleh Resource Manager. Anda dapat menggunakannya untuk eksekusi dengan mengaktifkannya dengan konteks eksekusi menggunakan IVirtualProcessorRoot::Activate.
SwitchOut harus dipanggil pada interface IThreadProxy yang mewakili utas yang sedang berjalan atau hasilnya tidak terdefinisi.
Di pustaka dan header yang dikirim dengan Visual Studio 2010, metode ini tidak mengambil parameter dan tidak menginisialisasi ulang akar prosesor virtual. Untuk mempertahankan perilaku lama, nilai Blocking parameter default disediakan.
IThreadProxy::Metode SwitchTo
Melakukan peralihan konteks kooperatif dari konteks yang saat ini dijalankan ke konteks yang berbeda.
virtual void SwitchTo(
_Inout_ IExecutionContext* pContext,
SwitchingProxyState switchState) = 0;
Parameter
pContext
Konteks eksekusi untuk beralih dengan cara kooperatif.
switchState
Menunjukkan status proxy threading yang melakukan pengalihan. Parameternya berjenis SwitchingProxyState.
Keterangan
Gunakan metode ini untuk beralih dari satu konteks eksekusi ke konteks lain, dari metode IExecutionContext::D ispatch dari konteks eksekusi pertama. Metode ini mengaitkan konteks eksekusi pContext dengan proksi utas jika belum terasosiasi dengan yang lain. Kepemilikan proxy thread saat ini ditentukan oleh nilai yang Anda tentukan untuk argumen switchState.
Gunakan nilai Idle ketika Anda ingin mengembalikan proxy thread yang sedang berjalan ke Pengelola Sumber Daya. Memanggil SwitchTo dengan parameter switchState yang diatur ke Idle akan menyebabkan konteks pContext eksekusi mulai dijalankan pada sumber daya eksekusi yang mendasar. Kepemilikan proxy thread ini ditransfer ke Resource Manager, dan Anda diharapkan untuk kembali dari metode konteks eksekusi Dispatch segera setelah SwitchTo mengembalikan, untuk menyelesaikan transfer. Konteks eksekusi yang sedang dieksekusi oleh proksi utas dipisahkan dari proksi utas, dan penjadwal bebas untuk menggunakannya kembali atau menghancurkannya sesuai keinginannya.
Gunakan nilai Blocking saat Anda ingin proksi utas ini memasukkan status terblokir. Memanggil SwitchTo dengan parameter switchState yang diatur ke Blocking akan menyebabkan konteks eksekusi pContext mulai berjalan, dan memblokir agen utas saat ini hingga eksekusi dilanjutkan. Penjadwal mempertahankan kepemilikan proksi utas saat proksi utas berada dalam Blocking status . Proksi utas pemblokiran dapat dilanjutkan dengan memanggil fungsi SwitchTo untuk beralih ke konteks eksekusi proksi utas ini. Anda juga dapat melanjutkan proksi berutas, dengan menggunakan konteks terkait untuk mengaktifkan inti prosesor virtual. Untuk informasi selengkapnya tentang cara melakukannya, lihat IVirtualProcessorRoot::Activate.
Gunakan nilai Nesting saat Anda ingin melepaskan sementara proksi thread ini dari root prosesor virtual yang dijalankannya, dan penjadwal tempatnya mengirimkan pekerjaan. Memanggil SwitchTo dengan parameter switchState disetel ke Nesting akan menyebabkan konteks eksekusi pContext mulai dijalankan dan proksi utas saat ini juga tetap berjalan tanpa perlu akar prosesor virtual. Proksi thread dianggap telah meninggalkan penjadwal hingga memanggil metode IThreadProxy::SwitchOut pada waktu mendatang. Metode ini IThreadProxy::SwitchOut dapat memblokir proksi utas hingga akar prosesor virtual tersedia untuk menjadwalkan ulang.
SwitchTo harus dipanggil pada interface IThreadProxy yang mewakili thread yang sedang dieksekusi atau hasilnya tidak ditentukan. Fungsi melemparkan invalid_argument jika parameter pContext diatur ke NULL.
Metode IThreadProxy::YieldToSystem
Menyebabkan utas yang memanggil menyerahkan eksekusi ke utas lain yang siap berjalan pada prosesor saat ini. Sistem operasi memilih utas berikutnya yang akan dijalankan.
virtual void YieldToSystem() = 0;
Keterangan
Ketika dipanggil oleh proksi utas yang didukung oleh utas Windows biasa, YieldToSystem berperilaku persis seperti fungsi SwitchToThreadWindows . Namun, ketika fungsi SwitchToThread dipanggil dari utas User-Mode Schedulable (UMS), ia mendelegasikan tugas pemilihan utas berikutnya untuk dijalankan kepada penjadwal mode pengguna, bukan sistem operasi. Untuk mencapai efek peralihan yang diinginkan ke utas siap yang berbeda dalam sistem, gunakan YieldToSystem.
YieldToSystem harus dipanggil pada IThreadProxy antarmuka yang mewakili utas yang sedang dieksekusi atau hasilnya tidak ditentukan.
Lihat juga
Namespace layanan konkurensi
Struktur IExecutionContext
Struktur IScheduler
Struktur IVirtualProcessorRoot