Share via


estructura JOBOBJECT_ASSOCIATE_COMPLETION_PORT (winnt.h)

Contiene información utilizada 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 de la función PostQueuedCompletionStatus cuando se envían mensajes en nombre del trabajo.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 y Windows Server 2016: Especifique NULL para quitar la asociación entre el actual puerto de finalización y el trabajo.

Comentarios

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 primaria 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, excepto los límites establecidos con la clase de información JobObjectNotificationLimitInformation , los mensajes solo están pensados como notificaciones y no se garantiza su entrega al puerto de finalización. El error de un mensaje para llegar al puerto de finalización no significa necesariamente que el evento no se haya producido. Se garantiza que las notificaciones de límites establecidos con JobObjectNotificationLimitInformation lleguen al puerto de finalización.

Un subproceso debe supervisar el puerto de finalización mediante la función GetQueuedCompletionStatus para recoger los mensajes. El subproceso recibe información en los parámetros GetQueuedCompletionStatus que se muestran en la tabla siguiente.

Parámetro Información recibida
lpCompletionKey Valor especificado en CompletionKey durante la asociación de puertos 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.
LpNumberOfBytes 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 siguientes mensajes 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 (vea 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 finalizar 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 solicitar 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 salido de 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 hay uno 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 hay uno 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 Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado winnt.h (incluya Windows.h)

Consulte también

PostQueuedCompletionStatus

QueryInformationJobObject

SetInformationJobObject