estrutura JOBOBJECT_ASSOCIATE_COMPLETION_PORT (winnt.h)

Contém informações usadas para associar uma porta de conclusão a um trabalho. Você pode associar uma porta de conclusão a um trabalho.

Sintaxe

typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
  PVOID  CompletionKey;
  HANDLE CompletionPort;
} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;

Membros

CompletionKey

O valor a ser usado no parâmetro dwCompletionKey de PostQueuedCompletionStatus quando as mensagens são enviadas em nome do trabalho.

CompletionPort

A porta de conclusão a ser usada no parâmetro CompletionPort da função PostQueuedCompletionStatus quando as mensagens são enviadas em nome do trabalho.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 e Windows Server 2016: especifique NULL para remover a associação entre o atual porta de conclusão e o trabalho.

Comentários

O sistema envia mensagens para a porta de conclusão de E/S associada a um trabalho quando determinados eventos ocorrem. Se o trabalho estiver aninhado, a mensagem será enviada para cada porta de conclusão de E/S associada a qualquer trabalho na cadeia de trabalho pai do trabalho que disparou a mensagem. Todas as mensagens são enviadas diretamente do trabalho como se o trabalho tivesse chamado a função PostQueuedCompletionStatus .

Observe que, com exceção dos limites definidos com a classe de informações JobObjectNotificationLimitInformation , as mensagens são destinadas apenas como notificações e sua entrega para a porta de conclusão não é garantida. A falha de uma mensagem ao chegar à porta de conclusão não significa necessariamente que o evento não ocorreu. As notificações para limites definidos com JobObjectNotificationLimitInformation têm a garantia de chegar à porta de conclusão.

Um thread deve monitorar a porta de conclusão usando a função GetQueuedCompletionStatus para pegar as mensagens. O thread recebe informações nos parâmetros GetQueuedCompletionStatus mostrados na tabela a seguir.

Parâmetro Informações recebidas
lpCompletionKey O valor especificado em CompletionKey durante a associação de porta de conclusão. Se uma porta de conclusão estiver associada a vários trabalhos, CompletionKey deverá ajudar o chamador a determinar qual porta de conclusão está enviando uma mensagem.
lpOverlapped Valor específico da mensagem. Para obter mais informações, consulte a tabela de identificadores de mensagem a seguir.
LpNumberOfBytes O identificador de mensagem que indica qual evento relacionado ao trabalho ocorreu. Para obter mais informações, consulte a tabela de identificadores de mensagem a seguir.
 

As mensagens a seguir podem ser enviadas para a porta de conclusão. Observe que, para mensagens que retornam um identificador de processo, você não pode garantir que esse processo ainda esteja ativo ou que o identificador não tenha sido reciclado (atribuído a um novo processo após o encerramento), a menos que você mantenha um identificador aberto para o processo.

Identificador de mensagem Descrição
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS Indica que um processo associado ao trabalho foi encerrado com um código de saída que indica uma saída anormal (consulte a lista que segue esta tabela).

O valor de lpOverlapped é o identificador do processo de saída.

JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT Indica que o limite do processo ativo foi excedido.

O valor de lpOverlapped é NULL.

JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO Indica que a contagem de processos ativos foi decrementada para 0. Por exemplo, se o trabalho tiver atualmente dois processos ativos, o sistema enviará essa mensagem depois que ambos terminarem.

O valor de lpOverlapped é NULL.

JOB_OBJECT_MSG_END_OF_JOB_TIME Indica que a opção JOB_OBJECT_POST_AT_END_OF_JOB está em vigor e o limite de tempo de fim do trabalho foi atingido. Ao postar essa mensagem, o limite de tempo é cancelado e os processos do trabalho podem continuar a ser executados.

O valor de lpOverlapped é NULL.

JOB_OBJECT_MSG_END_OF_PROCESS_TIME Indica que um processo excedeu um limite de tempo por processo. O sistema envia essa mensagem depois que o encerramento do processo é solicitado.

O valor de lpOverlapped é o identificador do processo que excedeu seu limite.

JOB_OBJECT_MSG_EXIT_PROCESS Indica que um processo associado ao trabalho foi encerrado.

O valor de lpOverlapped é o identificador do processo de saída.

JOB_OBJECT_MSG_JOB_MEMORY_LIMIT Indica que um processo associado ao trabalho fez com que o trabalho excedesse o limite de memória em todo o trabalho (se um estiver em vigor).

O valor de lpOverlapped especifica o identificador do processo que tentou exceder o limite. O sistema não enviará essa mensagem se o processo ainda não tiver relatado seu identificador de processo.

JOB_OBJECT_MSG_NEW_PROCESS Indica que um processo foi adicionado ao trabalho. Os processos adicionados a um trabalho no momento em que uma porta de conclusão está associada também são relatados.

O valor de lpOverlapped é o identificador do processo adicionado ao trabalho.

JOB_OBJECT_MSG_NOTIFICATION_LIMIT Indica que um processo associado a um trabalho registrado para notificações de limite de recursos excedeu um ou mais limites. Use a função QueryInformationJobObject com JobObjectLimitViolationInformation para determinar qual limite foi excedido.

O valor de lpOverlapped é o identificador do processo que excedeu seu limite. O sistema não enviará essa mensagem se o processo ainda não tiver relatado seu identificador de processo.

JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT Indica que um processo associado ao trabalho excedeu seu limite de memória (se um estiver em vigor).

O valor de lpOverlapped é o identificador do processo que excedeu seu limite. O sistema não enviará essa mensagem se o processo ainda não tiver relatado seu identificador de processo.

 

Os seguintes códigos de saída indicam uma saída anormal:

Você deve ser cauteloso ao usar as mensagens JOB_OBJECT_MSG_NEW_PROCESS e JOB_OBJECT_MSG_EXIT_PROCESS, pois podem ocorrer condições de corrida. Por exemplo, se os processos estiverem iniciando e saindo ativamente dentro de um trabalho e você estiver no processo de atribuir uma porta de conclusão ao trabalho, você poderá perder mensagens para processos cujos estados mudam durante a associação da porta de conclusão. Por esse motivo, é melhor associar uma porta de conclusão a um trabalho quando o trabalho estiver inativo.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho winnt.h (inclua Windows.h)

Confira também

PostQueuedCompletionStatus

QueryInformationJobObject

SetInformationJobObject