struktur JOBOBJECT_ASSOCIATE_COMPLETION_PORT (winnt.h)
Berisi informasi yang digunakan untuk mengaitkan port penyelesaian dengan pekerjaan. Anda dapat mengaitkan satu port penyelesaian dengan pekerjaan.
Sintaks
typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
PVOID CompletionKey;
HANDLE CompletionPort;
} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
Anggota
CompletionKey
Nilai yang digunakan dalam parameter dwCompletionKey dari PostQueuedCompletionStatus saat pesan dikirim atas nama pekerjaan.
CompletionPort
Port penyelesaian yang akan digunakan dalam parameter CompletionPort dari fungsi PostQueuedCompletionStatus saat pesan dikirim atas nama pekerjaan.
Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 dan Windows Server 2016: Tentukan NULL untuk menghapus hubungan antara port penyelesaian saat ini dan pekerjaan.
Keterangan
Sistem mengirim pesan ke port penyelesaian I/O yang terkait dengan pekerjaan ketika peristiwa tertentu terjadi. Jika pekerjaan ditumpuk, pesan dikirim ke setiap port penyelesaian I/O yang terkait dengan pekerjaan apa pun dalam rantai pekerjaan induk pekerjaan yang memicu pesan. Semua pesan dikirim langsung dari pekerjaan seolah-olah pekerjaan telah memanggil fungsi PostQueuedCompletionStatus .
Perhatikan bahwa, kecuali untuk batas yang ditetapkan dengan kelas informasi JobObjectNotificationLimitInformation , pesan hanya dimaksudkan sebagai pemberitahuan dan pengirimannya ke port penyelesaian tidak dijamin. Kegagalan pesan tiba di port penyelesaian tidak selalu berarti bahwa peristiwa tidak terjadi. Pemberitahuan untuk batas yang ditetapkan dengan JobObjectNotificationLimitInformation dijamin tiba di port penyelesaian.
Utas harus memantau port penyelesaian menggunakan fungsi GetQueuedCompletionStatus untuk mengambil pesan. Utas menerima informasi dalam parameter GetQueuedCompletionStatus yang diperlihatkan dalam tabel berikut.
Parameter | Informasi Diterima |
---|---|
lpCompletionKey | Nilai yang ditentukan dalam CompletionKey selama asosiasi port penyelesaian. Jika port penyelesaian dikaitkan dengan beberapa pekerjaan, CompletionKey akan membantu pemanggil menentukan port penyelesaian mana yang mengirim pesan. |
lpOverlapped | Nilai khusus pesan. Untuk informasi selengkapnya, lihat tabel pengidentifikasi pesan berikut ini. |
LpNumberOfBytes | Pengidentifikasi pesan yang menunjukkan peristiwa terkait pekerjaan mana yang terjadi. Untuk informasi selengkapnya, lihat tabel pengidentifikasi pesan berikut ini. |
Pesan berikut dapat dikirim ke port penyelesaian. Perhatikan bahwa untuk pesan yang mengembalikan pengidentifikasi proses, Anda tidak dapat menjamin bahwa proses ini masih aktif atau bahwa pengidentifikasi belum didaur ulang (ditetapkan ke proses baru setelah penghentian) kecuali Anda mempertahankan handel terbuka untuk proses tersebut.
Pengidentifikasi Pesan | Deskripsi |
---|---|
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS |
Menunjukkan bahwa proses yang terkait dengan pekerjaan keluar dengan kode keluar yang menunjukkan keluarnya abnormal (lihat daftar yang mengikuti tabel ini).
Nilai lpOverlapped adalah pengidentifikasi proses keluar. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT |
Menunjukkan bahwa batas proses aktif telah terlampaui.
Nilai lpOverlapped adalah NULL. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO |
Menunjukkan bahwa jumlah proses aktif telah diturunkan menjadi 0. Misalnya, jika pekerjaan saat ini memiliki dua proses aktif, sistem mengirim pesan ini setelah keduanya dihentikan.
Nilai lpOverlapped adalah NULL. |
JOB_OBJECT_MSG_END_OF_JOB_TIME |
Menunjukkan bahwa opsi JOB_OBJECT_POST_AT_END_OF_JOB berlaku dan batas waktu akhir pekerjaan telah tercapai. Setelah memposting pesan ini, batas waktu dibatalkan dan proses pekerjaan dapat terus berjalan.
Nilai lpOverlapped adalah NULL. |
JOB_OBJECT_MSG_END_OF_PROCESS_TIME |
Menunjukkan bahwa proses telah melebihi batas waktu per proses. Sistem mengirim pesan ini setelah penghentian proses diminta.
Nilai lpOverlapped adalah pengidentifikasi proses yang melebihi batasnya. |
JOB_OBJECT_MSG_EXIT_PROCESS |
Menunjukkan bahwa proses yang terkait dengan pekerjaan telah keluar.
Nilai lpOverlapped adalah pengidentifikasi proses keluar. |
JOB_OBJECT_MSG_JOB_MEMORY_LIMIT |
Menunjukkan bahwa proses yang terkait dengan pekerjaan menyebabkan pekerjaan melebihi batas memori di seluruh pekerjaan (jika ada).
Nilai lpOverlapped menentukan pengidentifikasi proses yang telah mencoba melebihi batas. Sistem tidak mengirim pesan ini jika proses belum melaporkan pengidentifikasi prosesnya. |
JOB_OBJECT_MSG_NEW_PROCESS |
Menunjukkan bahwa proses telah ditambahkan ke pekerjaan. Proses yang ditambahkan ke pekerjaan pada saat port penyelesaian dikaitkan juga dilaporkan.
Nilai lpOverlapped adalah pengidentifikasi proses yang ditambahkan ke pekerjaan. |
JOB_OBJECT_MSG_NOTIFICATION_LIMIT |
Menunjukkan bahwa proses yang terkait dengan pekerjaan yang telah mendaftar untuk pemberitahuan batas sumber daya telah melebihi satu atau beberapa batas. Gunakan fungsi QueryInformationJobObject dengan JobObjectLimitViolationInformation untuk menentukan batas mana yang terlampaui.
Nilai lpOverlapped adalah pengidentifikasi proses yang telah melebihi batasnya. Sistem tidak mengirim pesan ini jika proses belum melaporkan pengidentifikasi prosesnya. |
JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT |
Menunjukkan bahwa proses yang terkait dengan pekerjaan telah melebihi batas memorinya (jika ada yang berlaku).
Nilai lpOverlapped adalah pengidentifikasi proses yang telah melebihi batasnya. Sistem tidak mengirim pesan ini jika proses belum melaporkan pengidentifikasi prosesnya. |
Kode keluar berikut menunjukkan keluarnya abnormal:
Anda harus berhati-hati saat menggunakan pesan JOB_OBJECT_MSG_NEW_PROCESS dan JOB_OBJECT_MSG_EXIT_PROCESS, karena kondisi balapan mungkin terjadi. Misalnya, jika proses secara aktif memulai dan keluar dalam pekerjaan, dan Anda sedang dalam proses menetapkan port penyelesaian ke pekerjaan, Anda mungkin melewatkan pesan untuk proses yang statusnya berubah selama asosiasi port penyelesaian. Untuk alasan ini, yang terbaik adalah mengaitkan port penyelesaian dengan pekerjaan ketika pekerjaan tidak aktif.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Header | winnt.h (sertakan Windows.h) |