Kelas Konteks

Mewakili abstraksi untuk konteks eksekusi.

Sintaks

class Context;

Anggota

Konstruktor yang Dilindungi

Nama Deskripsi
~Destruktor Konteks

Metode Publik

Nama Deskripsi
Blok Memblokir konteks saat ini.
CurrentContext Mengembalikan penunjuk ke konteks saat ini.
GetId Mengembalikan ID untuk konteks yang unik dalam penjadwal di mana konteks tersebut berada.
GetScheduleGroupId Mengembalikan pengidentifikasi untuk grup jadwal yang saat ini sedang dikerjakan oleh konteks.
GetVirtualProcessorId Mengembalikan pengidentifikasi untuk prosesor virtual tempat konteks sedang dijalankan.
Id Mengembalikan pengidentifikasi untuk konteks saat ini yang unik dalam penjadwal tempat konteks saat ini berada.
IsCurrentTaskCollectionCanceling Mengembalikan indikasi apakah kumpulan tugas yang saat ini menjalankan langsung pada konteks saat ini sedang mengalami pembatalan aktif (atau akan segera).
IsSynchronouslyBlocked Menentukan apakah konteks diblokir secara sinkron atau tidak. Konteks dianggap diblokir secara sinkron jika secara eksplisit melakukan tindakan yang menyebabkan pemblokiran.
Berlangganan berlebihan Menyuntikkan prosesor virtual tambahan ke penjadwal selama durasi blok kode saat dipanggil pada konteks yang dijalankan pada salah satu prosesor virtual di penjadwal tersebut.
ScheduleGroupId Mengembalikan pengidentifikasi untuk grup jadwal yang sedang dikerjakan oleh konteks sekarang.
Unblock Membuka blokir konteks dan membuatnya dapat dijalankan.
VirtualProcessorId Mengembalikan pengidentifikasi untuk prosesor virtual tempat konteks saat ini dijalankan.
Hasil Menghasilkan eksekusi sehingga konteks lain dapat dijalankan. Jika tidak ada konteks lain yang tersedia untuk dihasilkan, penjadwal dapat menghasilkan utas sistem operasi lain.

Keterangan

Penjadwal Runtime Keserasian (lihat Penjadwal) menggunakan konteks eksekusi untuk menjalankan tugas yang ditugaskan oleh aplikasi Anda. Utas Win32 adalah contoh konteks eksekusi pada sistem operasi Windows.

Setiap saat, tingkat konkurensi penjadwal sama dengan jumlah prosesor virtual yang diberikan kepadanya oleh Resource Manager. Prosesor virtual adalah abstraksi untuk sumber daya pemrosesan dan dipetakan ke utas perangkat keras pada sistem dasar. Hanya konteks penjadwal tunggal yang dapat dijalankan pada prosesor virtual pada waktu tertentu.

Penjadwal bersifat kooperatif dan konteks yang dijalankan dapat menghasilkan prosesor virtualnya ke konteks yang berbeda kapan saja jika ingin memasuki status tunggu. Ketika penantian tugas tersebut terpenuhi, tugas tidak dapat dilanjutkan sampai prosesor virtual yang tersedia dari penjadwal mulai menjalankannya.

Hierarki Pewarisan

Context

Persyaratan

Header: concrt.h

Namespace: konkurensi

Blokir

Memblokir konteks saat ini.

static void __cdecl Block();

Keterangan

Metode ini akan mengakibatkan penjadwal default proses dibuat dan/atau dilampirkan ke konteks panggilan jika saat ini tidak ada penjadwal yang terkait dengan konteks panggilan.

Jika konteks panggilan berjalan pada prosesor virtual, prosesor virtual akan menemukan konteks lain yang dapat dijalankan untuk dijalankan atau berpotensi membuat yang baru.

Setelah metode Block dipanggil atau akan dipanggil, Anda harus memasangkannya dengan panggilan ke metode buka blokir dari konteks eksekusi lain agar dapat dijalankan lagi. Ketahuilah bahwa ada periode penting antara titik di mana kode Anda menerbitkan konteksnya agar utas lain dapat memanggil Unblock metode dan titik di mana panggilan Block metode aktual dilakukan. Selama periode ini, Anda tidak boleh memanggil metode apa pun yang pada gilirannya dapat memblokir dan membuka blokir karena alasannya sendiri (misalnya, memperoleh kunci). Panggilan ke metode Block dan Unblock tidak melacak alasan pemblokiran dan pencabutan blokir. Hanya satu objek yang harus memiliki kepemilikan sepasang Block- Unblock .

Metode ini dapat melemparkan berbagai pengecualian, termasuk scheduler_resource_allocation_error.

~Konteks

virtual ~Context();

KonteksSaatIni

Mengembalikan penunjuk ke konteks saat ini.

static Context* __cdecl CurrentContext();

Tampilkan Nilai

Penunjuk ke konteks saat ini.

Keterangan

Metode ini akan mengakibatkan penjadwal default proses dibuat dan/atau dilampirkan ke konteks panggilan jika saat ini tidak ada penjadwal yang terkait dengan konteks panggilan.

GetId

Mengembalikan ID untuk konteks yang unik dalam penjadwal di mana konteks tersebut berada.

virtual unsigned int GetId() const = 0;

Tampilkan Nilai

Pengidentifikasi untuk konteks yang bersifat unik dalam penjadwal tempat konteks tersebut berada.

GetScheduleGroupId

Mengembalikan pengidentifikasi untuk grup jadwal yang saat ini sedang dikerjakan oleh konteks.

virtual unsigned int GetScheduleGroupId() const = 0;

Tampilkan Nilai

Pengidentifikasi untuk kelompok jadwal yang sedang dikerjakan oleh konteks saat ini.

Keterangan

Nilai pengembalian dari metode ini adalah pengambilan sampel instan dari grup jadwal tempat konteks dijalankan. Jika metode ini dipanggil pada konteks selain konteks saat ini, nilai dapat basi saat dikembalikan dan tidak dapat diandalkan. Biasanya, metode ini hanya digunakan untuk tujuan penelusuran kesalahan atau pelacakan.

GetVirtualProcessorId

Mengembalikan pengidentifikasi untuk prosesor virtual tempat konteks sedang dijalankan.

virtual unsigned int GetVirtualProcessorId() const = 0;

Tampilkan Nilai

Jika konteks saat ini dijalankan pada prosesor virtual, pengidentifikasi untuk prosesor virtual tempat konteks sedang dijalankan; jika tidak, nilai -1.

Keterangan

Nilai pengembalian dari metode ini adalah pengambilan sampel instan dari prosesor virtual tempat konteks dijalankan. Nilai ini dapat basi saat dikembalikan dan tidak dapat diandalkan. Biasanya, metode ini hanya digunakan untuk tujuan penelusuran kesalahan atau pelacakan.

Id

Mengembalikan pengidentifikasi untuk konteks saat ini yang unik dalam penjadwal tempat konteks saat ini berada.

static unsigned int __cdecl Id();

Tampilkan Nilai

Jika konteks saat ini terhubung dengan penjadwal, gunakan pengidentifikasi unik untuk konteks ini dalam penjadwal tersebut; jika tidak, nilainya -1.

ApakahKoleksiTugasSaatIniSedangDibatalkan

Mengembalikan indikasi apakah kumpulan tugas yang saat ini menjalankan langsung pada konteks saat ini sedang mengalami pembatalan aktif (atau akan segera).

static bool __cdecl IsCurrentTaskCollectionCanceling();

Tampilkan Nilai

Jika penjadwal dilampirkan ke konteks panggilan dan kelompok tugas menjalankan tugas secara sebaris pada konteks tersebut, indikasi apakah kelompok tugas tersebut sedang dalam pembatalan aktif (atau akan segera); jika tidak, maka nilainya adalah false.

IsDiblokirSecaraSinkron

Menentukan apakah konteks diblokir secara sinkron atau tidak. Konteks dianggap diblokir secara sinkron jika secara eksplisit melakukan tindakan yang menyebabkan pemblokiran.

virtual bool IsSynchronouslyBlocked() const = 0;

Tampilkan Nilai

Apakah konteks diblokir secara sinkron.

Keterangan

Konteks dianggap diblokir secara sinkron jika secara eksplisit melakukan tindakan yang menyebabkan pemblokiran. Pada penjadwal utas, ini akan menunjukkan panggilan langsung ke metode Context::Block atau ke objek sinkronisasi yang dibangun menggunakan metode Context::Block.

Nilai pengembalian dari metode ini adalah sampel seketika dari apakah konteks diblokir secara sinkron. Nilai ini mungkin basi saat dikembalikan dan hanya dapat digunakan dalam keadaan yang sangat spesifik.

penghapusan operator

Objek Context dihancurkan secara internal oleh runtime. Ini tidak dapat dihapus secara eksplisit.

void operator delete(void* _PObject);

Parameter

_PObject
Penunjuk ke objek yang akan dihapus.

Berlangganan berlebihan

Menyuntikkan prosesor virtual tambahan ke penjadwal selama durasi blok kode saat dipanggil pada konteks yang dijalankan pada salah satu prosesor virtual di penjadwal tersebut.

static void __cdecl Oversubscribe(bool _BeginOversubscription);

Parameter

_BeginOversubscription
Jika true, hal ini menunjukkan bahwa prosesor virtual tambahan sebaiknya ditambahkan selama durasi oversubscription. Jika false, ini adalah indikasi bahwa kelebihan langganan harus berakhir dan prosesor virtual yang ditambahkan sebelumnya harus dihapus.

ID Kelompok Jadwal

Mengembalikan pengidentifikasi untuk grup jadwal yang sedang dikerjakan oleh konteks sekarang.

static unsigned int __cdecl ScheduleGroupId();

Tampilkan Nilai

Jika konteks saat ini melekat pada penjadwal dan sedang mengerjakan grup penjadwal, maka pengenal untuk grup penjadwal dimana konteks saat ini sedang bekerja; jika tidak, maka nilainya adalah -1.

Buka blokir

Membuka blokir konteks dan membuatnya dapat dijalankan.

virtual void Unblock() = 0;

Keterangan

Sah secara hukum untuk panggilan ke metode Unblock dilakukan sebelum panggilan yang sesuai ke metode Block. Selama panggilan ke metode Block dan Unblock dipasangkan dengan benar, runtime menangani urutan alami dari kedua pemanggilan mana pun. Panggilan Unblock yang datang sebelum panggilan Block hanya meniadakan efek dari panggilan Block.

Ada beberapa pengecualian yang dapat dilemparkan dari metode ini. Jika sebuah konteks mencoba memanggil metode Unblock pada dirinya sendiri, sebuah pengecualian context_self_unblock akan dilempar. Jika panggilan ke Block dan Unblock tidak dipasangkan dengan benar (misalnya, dua panggilan ke Unblock dilakukan untuk konteks yang saat ini sedang berjalan), pengecualian context_unblock_unbalanced akan dilemparkan.

Ketahuilah bahwa ada periode penting antara titik di mana kode Anda menerbitkan konteksnya agar utas lain dapat memanggil Unblock metode dan titik di mana panggilan Block metode aktual dilakukan. Selama periode ini, Anda tidak boleh memanggil metode apa pun yang pada gilirannya dapat memblokir dan membuka blokir karena alasannya sendiri (misalnya, memperoleh kunci). Panggilan ke metode Block dan Unblock tidak melacak alasan pemblokiran dan pencabutan blokir. Hanya satu objek yang harus memiliki kepemilikan pasangan Block dan Unblock .

VirtualProcessorId

Mengembalikan pengidentifikasi untuk prosesor virtual tempat konteks saat ini dijalankan.

static unsigned int __cdecl VirtualProcessorId();

Tampilkan Nilai

Jika konteks saat ini dilampirkan ke penjadwal, pengidentifikasi untuk prosesor virtual tempat konteks saat ini dijalankan; jika tidak, nilai -1.

Keterangan

Nilai pengembalian dari metode ini adalah sampel instan dari prosesor virtual yang sedang dieksekusi oleh konteks saat ini. Nilai ini dapat basi saat dikembalikan dan tidak dapat diandalkan. Biasanya, metode ini hanya digunakan untuk tujuan penelusuran kesalahan atau pelacakan.

Hasil

Menghasilkan eksekusi sehingga konteks lain dapat dijalankan. Jika tidak ada konteks lain yang tersedia untuk dihasilkan, penjadwal dapat menghasilkan utas sistem operasi lain.

static void __cdecl Yield();

Keterangan

Metode ini akan mengakibatkan penjadwal default proses dibuat dan/atau dilampirkan ke konteks panggilan jika saat ini tidak ada penjadwal yang terkait dengan konteks panggilan.

MenahanEksekusi

Menghasilkan eksekusi sehingga konteks lain dapat dijalankan. Jika tidak ada konteks lain yang tersedia untuk dihasilkan, penjadwal dapat menghasilkan utas sistem operasi lain.

static void __cdecl YieldExecution();

Keterangan

Metode ini akan mengakibatkan penjadwal default proses dibuat dan/atau dilampirkan ke konteks panggilan jika saat ini tidak ada penjadwal yang terkait dengan konteks panggilan.

Fungsi ini baru di Visual Studio 2015 dan identik dengan fungsi Hasil tetapi tidak bertentangan dengan makro Yield di Windows.h.

Lihat juga

Namespace layanan konkurensi
Kelas Penjadwal
Penjadwal Tugas