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) |