Tunggu dan APC

Catatan

Perilaku yang dijelaskan di halaman ini untuk APC pengguna berlaku untuk APC mode pengguna reguler serta APC mode pengguna khusus.

Utas yang menunggu objek dispatcher atas nama pemanggil mode pengguna harus siap untuk menunggu terganggu, baik oleh APC pengguna atau oleh penghentian utas. Saat utas memanggil KeWaitForSingleObject, KeWaitForMultipleObjects, KeWaitForMutexObject, atau KeDelayExecutionThread, sistem operasi dapat menempatkan utas dalam status tunggu. Biasanya, utas tetap dalam status tunggu sampai sistem operasi dapat menyelesaikan operasi yang diminta pemanggil. Namun, jika penelepon menentukan WaitMode = UserMode, sistem operasi mungkin mengganggu penantian. Dalam hal ini, rutin keluar dengan nilai NTSTATUS STATUS_USER_APC.

Setiap driver yang memanggil salah satu dari empat rutinitas sebelumnya dengan WaitMode = UserMode harus siap untuk menerima nilai pengembalian STATUS_USER_APC. Driver harus menyelesaikan operasinya saat ini dengan STATUS_USER_APC dan mengembalikan kontrol ke mode pengguna.

Situasi yang tepat di mana sistem operasi mengganggu penantian tergantung pada nilai parameter rutin yang dapat diperingatkan . Jika True yang Dapat Diperingatkan = , penantian adalah tunggu yang dapat diperingatkan. Jika tidak, tunggu adalah tunggu yang tidak dapat diwaspadai. Sistem operasi mengganggu penantian yang dapat diperingatkan hanya untuk memberikan APC pengguna. Sistem operasi mengganggu kedua jenis tunggu untuk mengakhiri utas.

Tabel berikut menjelaskan hubungan antara pengaturan parameter, tunggu, dan pengiriman APC pengguna yang berbeda.

Parameter Tunggu terganggu? APC pengguna dikirimkan?
Dapat diperingatkan = TRUEWaitMode = UserMode Ya Ya
Dapat diperingatkan = TRUEWaitMode = KernelMode Ya Tidak
Dapat diperingatkan = FALSEWaitMode = UserMode Ya, untuk penghentian utas. Tidak, untuk APC pengguna. Tidak
Dapat diperingatkan = FALSEWaitMode = KernelMode Tidak Tidak

Anda dapat menonaktifkan APC kernel untuk utas. Jika Anda menonaktifkan APC kernel untuk utas, pengiriman APC pengguna dan penghentian utas untuk utas tersebut juga dinonaktifkan. Untuk informasi selengkapnya tentang cara menonaktifkan APC, lihat Menonaktifkan APC.

Pemberitahuan, mekanisme yang jarang digunakan yang bersifat internal untuk sistem operasi, juga dapat mengganggu status tunggu yang dapat diperingatkan. Pemberitahuan dapat mengganggu tunggu saat Alertable = TRUE, terlepas dari nilai parameter WaitMode . Rutinitas menunggu mengembalikan nilai STATUS_ALERTED.

Perhatikan bahwa APC kernel berjalan lebih awal, dan tidak menyebabkan KeWaitForXxx atau KeDelayExecutionThread kembali. Sistem mengganggu dan melanjutkan penantian secara internal. Driver biasanya tidak terpengaruh oleh proses ini, tetapi dimungkinkan bagi pengemudi untuk melewatkan sinyal objek dispatcher untuk kondisi sementara, seperti panggilan ke KePulseEvent.