JOBOBJECT_ASSOCIATE_COMPLETION_PORT結構 (winnt.h)
包含用來將完成埠與作業產生關聯的資訊。 您可以將一個完成埠與作業產生關聯。
語法
typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
PVOID CompletionKey;
HANDLE CompletionPort;
} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
成員
CompletionKey
當訊息代表作業傳送時,PostQueuedCompletionStatus 的 dwCompletionKey 參數中要使用的值。
CompletionPort
當訊息代表作業傳送時,PostQueuedCompletionStatus 函式的 CompletionPort 參數中要使用的完成埠。
Windows 8、Windows Server 2012、Windows 8.1、Windows Server 2012 R2、Windows 10 和 Windows Server 2016:指定 NULL 以移除目前之間的關聯完成埠和作業。
備註
當發生特定事件時,系統會將訊息傳送至與作業相關聯的 I/O 完成埠。 如果作業是巢狀的,訊息會傳送至與觸發訊息之作業之父作業鏈結中任何作業相關聯的每個 I/O 完成埠。 所有訊息都會直接從作業傳送,就像作業已呼叫 PostQueuedCompletionStatus 函式一樣。
請注意,除了使用 JobObjectNotificationLimitInformation 資訊類別所設定的限制之外,訊息僅供通知使用,而且無法保證其傳遞至完成埠。 到達完成埠的訊息失敗不一定表示事件未發生。 使用 JobObjectNotificationLimitInformation 設定之限制的通知保證會抵達完成埠。
線程必須使用 GetQueuedCompletionStatus 函式來監視完成埠,才能挑選訊息。 線程會接收下表所示 GetQueuedCompletionStatus 參數中的資訊。
參數 | 收到的資訊 |
---|---|
lpCompletionKey | 完成埠關聯期間 在 CompletionKey 中指定的值。 如果完成埠與多個作業相關聯, CompletionKey 應該協助呼叫端判斷傳送訊息的完成埠。 |
lpOverlapped | 訊息特定值。 如需詳細資訊,請參閱下列訊息標識符表格。 |
LpNumberOfBytes | 訊息標識碼,指出發生的作業相關事件。 如需詳細資訊,請參閱下列訊息標識符表格。 |
下列訊息可以傳送至完成埠。 請注意,對於傳回進程標識碼的訊息,您無法保證此進程仍在使用中,或者除非您維護進程開啟的句柄,否則在終止) 之後尚未回收該標識碼 (指派給新進程。
訊息識別碼 | Description |
---|---|
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS |
指出與作業相關聯的進程已結束,其結束代碼表示異常結束 (請參閱下表後面的清單) 。
lpOverlapped 的值是結束進程的標識碼。 |
JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT |
表示已超過作用中的進程限制。
lpOverlapped 的值是 NULL。 |
JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO |
表示使用中的進程計數已遞減為 0。 例如,如果作業目前有兩個作用中的進程,則系統會在兩者終止之後傳送此訊息。
lpOverlapped 的值是 NULL。 |
JOB_OBJECT_MSG_END_OF_JOB_TIME |
表示JOB_OBJECT_POST_AT_END_OF_JOB選項已生效,且已達到作業結束時間限制。 張貼此訊息時,會取消時間限制,而且作業的進程可以繼續執行。
lpOverlapped 的值是 NULL。 |
JOB_OBJECT_MSG_END_OF_PROCESS_TIME |
表示進程已超過每個進程的時間限制。 系統會在要求進程終止之後傳送此訊息。
lpOverlapped 的值是超過其限制的進程標識碼。 |
JOB_OBJECT_MSG_EXIT_PROCESS |
表示與作業相關聯的進程已結束。
lpOverlapped 的值是結束進程的標識碼。 |
JOB_OBJECT_MSG_JOB_MEMORY_LIMIT |
指出與作業相關聯的進程導致作業超過整個作業的記憶體限制, (其中一個有效) 。
lpOverlapped 的值會指定嘗試超過限制的進程標識碼。 如果進程尚未回報其進程標識碼,系統就不會傳送此訊息。 |
JOB_OBJECT_MSG_NEW_PROCESS |
表示進程已新增至作業。 也會報告在完成埠相關聯時新增至作業的進程。
lpOverlapped 的值是新增至作業的進程標識碼。 |
JOB_OBJECT_MSG_NOTIFICATION_LIMIT |
表示與已註冊資源限制通知之作業相關聯的進程已超過一或多個限制。 搭配 JobObjectLimitViolationInformationInformation 使用 QueryInformationJobObject 函式來判斷超過的限制。
lpOverlapped 的值是超過其限制的進程標識碼。 如果進程尚未回報其進程標識碼,系統就不會傳送此訊息。 |
JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT |
指出與作業相關聯的進程已超過其記憶體限制, (如果某個進程生效) 。
lpOverlapped 的值是超過其限制的進程標識碼。 如果進程尚未回報其進程標識碼,系統就不會傳送此訊息。 |
下列結束代碼表示異常結束:
使用JOB_OBJECT_MSG_NEW_PROCESS和JOB_OBJECT_MSG_EXIT_PROCESS訊息時,您必須小心,因為可能會發生競爭狀況。 例如,如果進程在作業內主動啟動和結束,而且您正在將完成埠指派給作業的程式,您可能會錯過在完成埠關聯期間變更其狀態的進程訊息。 因此,最好在作業處於非使用中狀態時,將完成埠與作業產生關聯。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
標頭 | winnt.h (包含 Windows.h) |