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)

Lihat juga

PostQueuedCompletionStatus

QueryInformationJobObject

SetInformationJobObject