Struktur IThreadProxy
Abstraksi untuk utas eksekusi. Bergantung pada SchedulerType
kunci kebijakan penjadwal yang Anda buat, Resource Manager akan memberi Anda proksi utas yang didukung oleh utas Win32 biasa atau utas schedulable mode pengguna (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 pengidentifikasi 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 utas panggilan menghasilkan eksekusi ke utas lain yang siap dijalankan pada prosesor saat ini. Sistem operasi memilih utas berikutnya yang akan dijalankan. |
Keterangan
Proksi utas digabungkan dengan konteks eksekusi yang diwakili oleh antarmuka IExecutionContext
sebagai sarana pengiriman pekerjaan.
Hierarki Warisan
IThreadProxy
Persyaratan
Header: concrtrm.h
Namespace: konkurensi
Metode IThreadProxy::GetId
Mengembalikan pengidentifikasi unik untuk proksi utas.
virtual unsigned int GetId() const = 0;
Tampilkan Nilai
Pengidentifikasi bilangan bulat yang unik.
IThreadProxy::Metode SwitchOut
Memisahkan konteks dari akar prosesor virtual yang mendasar.
virtual void SwitchOut(SwitchingProxyState switchState = Blocking) = 0;
Parameter
switchState
Menunjukkan status proksi utas yang menjalankan 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 akar prosesor virtual yang dimiliki penjadwal Anda, baik karena Resource Manager telah menginstruksikan Anda untuk melakukannya, atau karena Anda meminta akar prosesor virtual oversubscribed sementara, dan dilakukan dengannya. 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 utas dan akan melanjutkan eksekusi ketika akar prosesor virtual yang berbeda di penjadwal tersedia untuk menjalankannya. Proksi alur pemblokiran dapat dilanjutkan dengan memanggil fungsi SwitchTo
untuk beralih ke konteks eksekusi proksi utas ini. Anda juga dapat melanjutkan proksi utas, dengan menggunakan konteks terkait untuk mengaktifkan akar 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 saat memblokir proksi utas atau melepaskannya untuk sementara dari akar prosesor virtual yang dijalankannya, dan penjadwal tempatnya mengirimkan pekerjaan. Gunakan SwitchOut
dengan parameter switchState
yang diatur ke Blocking
jika Anda ingin memblokir proksi utas. Ini nantinya dapat dilanjutkan menggunakan atau SwitchTo
IVirtualProcessorRoot::Activate
seperti yang disebutkan di atas. Gunakan SwitchOut
dengan parameter yang diatur ke Nesting
ketika Anda ingin melepaskan sementara proksi utas ini dari akar prosesor virtual yang dijalankannya, dan penjadwal yang terkait dengan prosesor virtual. 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 untuk terus dieksekusi tanpa perlu. 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 baik SwitchTo
oleh atau IVirtualProcessorRoot::Activate
di penjadwal tempatnya dilepaskan. 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 penjadwal Anda telah diberikan oleh Resource Manager. Anda dapat menggunakannya untuk eksekusi dengan mengaktifkannya dengan konteks eksekusi menggunakan IVirtualProcessorRoot::Activate
.
SwitchOut
harus dipanggil pada IThreadProxy
antarmuka yang mewakili utas yang sedang dijalankan atau hasilnya tidak ditentukan.
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 secara kooperatif.
switchState
Menunjukkan status proksi utas yang menjalankan sakelar. 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 pContext
eksekusi dengan proksi utas jika belum dikaitkan dengannya. Kepemilikan proksi utas saat ini ditentukan oleh nilai yang Anda tentukan untuk switchState
argumen .
Gunakan nilai Idle
saat Anda ingin mengembalikan proksi utas yang sedang dijalankan ke Resource Manager. Memanggil SwitchTo
dengan parameter switchState
yang diatur ke Idle
akan menyebabkan konteks pContext
eksekusi mulai dijalankan pada sumber daya eksekusi yang mendasar. Kepemilikan proksi utas ini ditransfer ke Resource Manager, dan Anda diharapkan untuk kembali dari metode konteks Dispatch
eksekusi segera setelah SwitchTo
pengembalian, untuk menyelesaikan transfer. Konteks eksekusi bahwa proksi utas dikirim dibongkar dari proksi utas, dan penjadwal bebas menggunakannya kembali atau menghancurkannya sesuai keinginan.
Gunakan nilai Blocking
saat Anda ingin proksi utas ini memasukkan status diblokir. Memanggil SwitchTo
dengan parameter switchState
yang diatur ke Blocking
akan menyebabkan konteks pContext
eksekusi mulai dijalankan, dan memblokir proksi utas saat ini hingga dilanjutkan. Penjadwal mempertahankan kepemilikan proksi utas saat proksi utas berada dalam Blocking
status . Proksi alur pemblokiran dapat dilanjutkan dengan memanggil fungsi SwitchTo
untuk beralih ke konteks eksekusi proksi utas ini. Anda juga dapat melanjutkan proksi utas, dengan menggunakan konteks terkait untuk mengaktifkan akar prosesor virtual. Untuk informasi selengkapnya tentang cara melakukannya, lihat IVirtualProcessorRoot::Activate.
Gunakan nilai Nesting
saat Anda ingin melepaskan sementara proksi utas ini dari akar prosesor virtual yang dijalankannya, dan penjadwal tempatnya mengirimkan pekerjaan. Memanggil SwitchTo
dengan parameter switchState
yang diatur ke Nesting
akan menyebabkan konteks pContext
eksekusi mulai dijalankan dan proksi utas saat ini juga terus dijalankan tanpa perlu akar prosesor virtual. Proksi utas dianggap telah meninggalkan penjadwal hingga memanggil metode IThreadProxy::SwitchOut di titik waktu selanjutnya. Metode ini IThreadProxy::SwitchOut
dapat memblokir proksi utas hingga akar prosesor virtual tersedia untuk menjadwalkan ulang.
SwitchTo
harus dipanggil pada IThreadProxy
antarmuka yang mewakili utas yang sedang dijalankan atau hasilnya tidak ditentukan. Fungsi melemparkan invalid_argument
jika parameter pContext
diatur ke NULL
.
Metode IThreadProxy::YieldToSystem
Menyebabkan utas panggilan menghasilkan eksekusi ke utas lain yang siap dijalankan 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 SwitchToThread
Windows . Namun, ketika dipanggil dari utas mode pengguna schedulable (UMS), SwitchToThread
fungsi mendelegasikan tugas memilih utas berikutnya untuk dijalankan ke 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 dijalankan atau hasilnya tidak ditentukan.
Lihat juga
Namespace layanan konkurensi
Struktur IExecutionContext
Struktur IScheduler
Struktur IVirtualProcessorRoot