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
代表作業傳送訊息時,PostQueuedCompletionStat us dwCompletionKey 參數中使用的值。
CompletionPort
當代表作業傳送訊息時,要用於 PostQueuedCompletionStatus 函式 CompletionPort 參數中使用的完成埠。
Windows 8 和更新版本、Windows Server 2012 和更新版本: 指定 NULL,以移除目前完成埠與作業之間的關聯。
言論
當發生特定事件時,系統會將訊息傳送至與作業相關聯的 I/O 完成埠。 如果作業是巢狀的,訊息會傳送至與觸發訊息之作業之父作業鏈結中任何作業相關聯的每個 I/O 完成埠。 所有訊息都會直接從作業傳送,就像作業已呼叫 postQueuedCompletionStatus 函式
請注意,除了使用 JobObjectNotificationLimitInformation 資訊類別所設定的限制之外,訊息僅供通知使用,且無法保證訊息傳遞至完成埠。 訊息抵達完成埠失敗不一定表示未發生事件。 JobObjectNotificationLimitInformation 所設定之限制的通知保證會到達完成埠。
線程必須使用 getQueuedCompletionStatus 函式來監視完成埠,以挑選訊息。 線程會在下表所示的 GetQueuedCompletionStatus 參數中接收資訊。
參數 | 已接收的資訊 |
---|---|
lpCompletionKey | 在完成埠關聯期間,CompletionKey 中指定的值。 如果完成埠與多個作業相關聯,CompletionKey 應該協助呼叫者判斷傳送訊息的完成埠。 |
lpOverlapped | 訊息特定值。 如需詳細資訊,請參閱下列訊息標識符表格。 |
LpNumberOfBytes | 指出發生哪些作業相關事件的訊息標識碼。 如需詳細資訊,請參閱下列訊息標識符表格。 |
下列訊息可以傳送至完成埠。 請注意,對於傳回進程標識碼的訊息,您無法保證此進程仍在使用中,或標識碼尚未回收(在終止后指派給新進程),除非您維持進程開啟的句柄。
訊息標識碼 | 描述 |
---|---|
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 |
表示與已註冊資源限制通知之作業相關聯的進程已超過一或多個限制。 搭配 JobObjectLimitViolationInformation 使用 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) |