estructura JOBOBJECT_ASSOCIATE_COMPLETION_PORT (winnt.h)
Contiene información que se usa para asociar un puerto de finalización a un trabajo. Puede asociar un puerto de finalización a un trabajo.
Sintaxis
typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
PVOID CompletionKey;
HANDLE CompletionPort;
} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
Miembros
CompletionKey
Valor que se va a usar en el parámetro dwCompletionKey de PostQueuedCompletionStatus cuando se envían mensajes en nombre del trabajo.
CompletionPort
Puerto de finalización que se va a usar en el parámetro CompletionPort del función PostQueuedCompletionStatus cuando se envían mensajes en nombre del trabajo.
Windows 8 y versiones posteriores, Windows Server 2012 y versiones posteriores: Especificar NULL para quitar la asociación entre el puerto de finalización actual y el trabajo.
Observaciones
El sistema envía mensajes al puerto de finalización de E/S asociado a un trabajo cuando se producen determinados eventos. Si el trabajo está anidado, el mensaje se envía a cada puerto de finalización de E/S asociado a cualquier trabajo de la cadena de trabajos primario del trabajo que desencadenó el mensaje. Todos los mensajes se envían directamente desde el trabajo como si el trabajo hubiera llamado a la función PostQueuedCompletionStatus.
Tenga en cuenta que, a excepción de los límites establecidos con la clase de información jobObjectNotificationLimitInformation
Un subproceso debe supervisar el puerto de finalización mediante la función
Parámetro | Información recibida |
---|---|
lpCompletionKey | Valor especificado en completionKey durante la asociación de puerto de finalización. Si un puerto de finalización está asociado a varios trabajos, CompletionKey debe ayudar al autor de la llamada a determinar qué puerto de finalización envía un mensaje. |
lpOverlapped | Valor específico del mensaje. Para obtener más información, consulte la tabla siguiente de identificadores de mensaje. |
|
Identificador de mensaje que indica qué evento relacionado con el trabajo se produjo. Para obtener más información, consulte la tabla siguiente de identificadores de mensaje. |
Los mensajes siguientes se pueden enviar al puerto de finalización. Tenga en cuenta que para los mensajes que devuelven un identificador de proceso, no puede garantizar que este proceso esté activo o que el identificador no se haya reciclado (asignado a un nuevo proceso después de la finalización) a menos que mantenga un identificador abierto para el proceso.
Identificador de mensaje | Descripción |
---|---|
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS |
Indica que un proceso asociado al trabajo salió con un código de salida que indica una salida anómala (consulte la lista que sigue a esta tabla).
El valor de lpOverlapped es el identificador del proceso de salida. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT |
Indica que se ha superado el límite de proceso activo.
El valor de lpOverlapped es NULL. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO |
Indica que el recuento de procesos activos se ha reducido a 0. Por ejemplo, si el trabajo tiene actualmente dos procesos activos, el sistema envía este mensaje después de que finalicen ambos.
El valor de lpOverlapped es NULL. |
JOB_OBJECT_MSG_END_OF_JOB_TIME |
Indica que la opción JOB_OBJECT_POST_AT_END_OF_JOB está en vigor y se ha alcanzado el límite de tiempo de finalización del trabajo. Tras publicar este mensaje, se cancela el límite de tiempo y los procesos del trabajo pueden continuar ejecutándose.
El valor de lpOverlapped es NULL. |
JOB_OBJECT_MSG_END_OF_PROCESS_TIME |
Indica que un proceso ha superado un límite de tiempo por proceso. El sistema envía este mensaje después de que se haya solicitado la finalización del proceso.
El valor de lpOverlapped es el identificador del proceso que superó su límite. |
JOB_OBJECT_MSG_EXIT_PROCESS |
Indica que se ha cerrado un proceso asociado al trabajo.
El valor de lpOverlapped es el identificador del proceso de salida. |
JOB_OBJECT_MSG_JOB_MEMORY_LIMIT |
Indica que un proceso asociado al trabajo hizo que el trabajo superara el límite de memoria para todo el trabajo (si uno está en vigor).
El valor de lpOverlapped especifica el identificador del proceso que ha intentado superar el límite. El sistema no envía este mensaje si el proceso aún no ha notificado su identificador de proceso. |
JOB_OBJECT_MSG_NEW_PROCESS |
Indica que se ha agregado un proceso al trabajo. También se notifican los procesos agregados a un trabajo en el momento en que se asocia un puerto de finalización.
El valor de lpOverlapped es el identificador del proceso agregado al trabajo. |
JOB_OBJECT_MSG_NOTIFICATION_LIMIT |
Indica que un proceso asociado a un trabajo que se ha registrado para las notificaciones de límite de recursos ha superado uno o varios límites. Use la función QueryInformationJobObject con JobObjectLimitViolationInformation para determinar qué límite se superó.
El valor de lpOverlapped es el identificador del proceso que ha superado su límite. El sistema no envía este mensaje si el proceso aún no ha notificado su identificador de proceso. |
JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT |
Indica que un proceso asociado al trabajo ha superado su límite de memoria (si uno está en vigor).
El valor de lpOverlapped es el identificador del proceso que ha superado su límite. El sistema no envía este mensaje si el proceso aún no ha notificado su identificador de proceso. |
Los siguientes códigos de salida indican una salida anómala:
Debe tener cuidado al usar los mensajes JOB_OBJECT_MSG_NEW_PROCESS y JOB_OBJECT_MSG_EXIT_PROCESS, ya que pueden producirse condiciones de carrera. Por ejemplo, si los procesos se inician y salen activamente dentro de un trabajo, y está en proceso de asignar un puerto de finalización al trabajo, puede perder mensajes para los procesos cuyos estados cambian durante la asociación del puerto de finalización. Por este motivo, es mejor asociar un puerto de finalización a un trabajo cuando el trabajo está inactivo.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows XP [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows Server 2003 [solo aplicaciones de escritorio] |
encabezado de |
winnt.h (incluya Windows.h) |