Структура
JOBOBJECT_ASSOCIATE_COMPLETION_PORTСтруктура
JOBOBJECT_ASSOCIATE_COMPLETION_PORT содержит информацию используемую для объединения порта завершения с заданием. Вы можете связать один порт завершения с заданием. Нет способа завершить ассоциацию, и нет способа связать другой порт с заданием.Синтаксис
typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT { PVOIDCompletionKey; HANDLE CompletionPort; } JOBOBJECT_ASSOCIATE_COMPLETION_PORT, PJOBOBJECT_ASSOCIATE_COMPLETION_PORT; |
CompletionKey
Значение, которое используется в параметре
dwCompletionKey функции PostQueuedCompletionStatus, когда сообщения отправляются от имени задания.CompletionPort
Порт завершения, который используется в параметре
CompletionPort функции PostQueuedCompletionStatus, когда сообщения отправляются от имени задания.Задание отправляет сообщения порту завершения тогда, когда происходят некоторые события. Все сообщения отправляются непосредственно от задания, как будто задание вызвало функцию
PostQueuedCompletionStatus. Поток, контролируя порт завершения, используя функцию GetQueuedCompletionStatus должен выбирать сообщения. Поток получает информацию в параметрах функции GetQueuedCompletionStatus, показанных в нижеследующей таблице.
Параметр |
Принимаемая информация |
lpCompletionKey |
Значение, заданное в CompletionKey в ходе ассоциации с портом завершения. Если порт завершения с многочисленными заданиями, параметр CompletionKey должен помочь выяснить вызывающую программу, которой порт завершения посылает сообщения. |
lpOverlapped |
Значение, установленное сообщением. Для получения дополнительной информации, см. нижеследующую таблицу кодов сообщений. |
LpNumberOfBytesTransfered |
Код сообщения, который указывает, какое произошло событие связанное с заданием. Для получения дополнительной информации, см. нижеследующую таблицу кодов сообщения. |
Нижеследующие сообщения могут быть отправлены в порт завершения.
Код сообщения |
Описание |
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_ACTIVE_PROCESS_LIMIT |
Указывает, что ограничение активного процесса было превышено. Значение параметра lpOverlapped - ПУСТО (NULL). |
JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO |
Указывает, что счет активного процесса был уменьшен до 0. Например, если задание в настоящее время имеет два активных процесса, система отправляет это сообщение после того, как они оба заканчивают работу. Значение параметра lpOverlapped - ПУСТО (NULL). |
JOB_OBJECT_MSG_NEW_PROCESS |
Указывает, что процесс был добавлен к заданию. Процессы добавляются к заданию, когда порт завершения является также связанным. Значение lpOverlapped - идентификатор процесса, добавляемого к заданию. |
JOB_OBJECT_MSG_EXIT_PROCESS |
Указывает, что процесс, связанный с заданием вышел. Значение lpOverlapped - идентификатор вышедшего процесса. |
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS |
Указывает, что процесс связался с заданием, вышедшим с кодом завершения, который обозначает аварийный выход (см. список, следующий за этой таблицей). Значение lpOverlapped - идентификатор вышедшого процесса. |
JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT |
Указывает, что процесс, связанный с заданием вышел за пределы своего ограничения памяти (если он действует). Значение lpOverlapped - идентификатор процесса, который нарушил свое ограничение. Система не отправляет это сообщение, если процесс еще не сообщил о своем идентификаторе процесса. |
JOB_OBJECT_MSG_JOB_MEMORY_LIMIT |
Указывает, что процесс, связанный с заданием заставил задание выйти за пределы обширное для заданию ограничение памяти (если оно действует). Значение lpOverlapped устанавливает идентификатор процесса, который попытался нарушать ограничение. Система не отправляет это сообщение, если процесс еще не сообщил о своем идентификаторе процесса. |
Нижеследующие коды завершения обозначают аварийный выход:
STATUS_ACCESS_VIOLATION STATUS_ARRAY_BOUNDS_EXCEEDED STATUS_BREAKPOINT STATUS_CONTROL_C_EXIT STATUS_DATATYPE_MISALIGNMENT STATUS_FLOAT_DENORMAL_OPERAND STATUS_FLOAT_DIVIDE_BY_ZERO STATUS_FLOAT_INEXACT_RESULT STATUS_FLOAT_INVALID_OPERATION STATUS_FLOAT_MULTIPLE_FAULTS STATUS_FLOAT_MULTIPLE_TRAPS STATUS_FLOAT_OVERFLOW STATUS_FLOAT_STACK_CHECK STATUS_FLOAT_UNDERFLOW |
STATUS_GUARD_PAGE_VIOLATION |
Вы должны быть осторожны при использовании сообщений
JOB_OBJECT_MSG_NEW_PROCESS и JOB_OBJECT_MSG_EXIT_PROCESS, поскольку может произойти состязание выполнения. Например, если процессы активно запускаются и выходят в пределах задания, а Вы находитесь в процессе связанном с портом завершения, который держат в готовности к заданию, то можете пропустить сообщения для процессов, состояния которых изменяются в ходе ассоциации с портом завершения. По этой причине, самое лучшее связать порт завершения с заданием, когда задание неактивно.Смотри также
Краткий обзор Процессы и потоки, Структуры, используемые процессами и потоками, PostQueuedCompletionStatus, QueryInformationJobObject, SetInformationJobObject
Размещение и совместимость JOBOBJECT_ASSOCIATE_COMPLETION_PORT |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Нет |
Windows Me |
Нет |
Windows 98 |
Нет |
Windows 95 |
Нет |
Заголовочный файл |
|
- объявлено в |
Winnt.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |