Bagikan melalui


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 SwitchToThreadWindows . 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