Partager via


structure JOBOBJECT_ASSOCIATE_COMPLETION_PORT (winnt.h)

Contient les informations utilisées pour associer un port d’achèvement à un travail. Vous pouvez associer un port d’achèvement à un travail.

Syntaxe

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

Membres

CompletionKey

Valeur à utiliser dans le paramètre dwCompletionKey de PostQueuedCompletionStatus lorsque les messages sont envoyés pour le compte du travail.

CompletionPort

Port d’achèvement à utiliser dans le paramètre CompletionPort de la fonction PostQueuedCompletionStatus lorsque des messages sont envoyés pour le compte du travail.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 et Windows Server 2016 : spécifiez NULL pour supprimer l’association entre le courant port d’achèvement et le travail.

Remarques

Le système envoie des messages au port d’achèvement des E/S associé à un travail lorsque certains événements se produisent. Si le travail est imbriqué, le message est envoyé à chaque port d’achèvement d’E/S associé à n’importe quel travail dans la chaîne de travaux parente du travail qui a déclenché le message. Tous les messages sont envoyés directement à partir du travail comme si le travail avait appelé la fonction PostQueuedCompletionStatus .

Notez que, à l’exception des limites définies avec la classe d’informations JobObjectNotificationLimitInformation , les messages sont destinés uniquement en tant que notifications et leur remise au port d’achèvement n’est pas garantie. L’échec d’un message à arriver au port d’achèvement ne signifie pas nécessairement que l’événement ne s’est pas produit. Les notifications pour les limites définies avec JobObjectNotificationLimitInformation sont garanties pour arriver au port d’achèvement.

Un thread doit surveiller le port d’achèvement à l’aide de la fonction GetQueuedCompletionStatus pour récupérer les messages. Le thread reçoit des informations dans les paramètres GetQueuedCompletionStatus indiqués dans le tableau suivant.

Paramètre Informations reçues
lpCompletionKey Valeur spécifiée dans CompletionKey pendant l’association du port d’achèvement. Si un port d’achèvement est associé à plusieurs travaux, CompletionKey doit aider l’appelant à déterminer quel port d’achèvement envoie un message.
lpOverlapped Valeur spécifique au message. Pour plus d’informations, consultez le tableau suivant des identificateurs de message.
LpNumberOfBytes Identificateur de message qui indique l’événement lié au travail qui s’est produit. Pour plus d’informations, consultez le tableau suivant des identificateurs de message.
 

Les messages suivants peuvent être envoyés au port d’achèvement. Notez que pour les messages qui retournent un identificateur de processus, vous ne pouvez pas garantir que ce processus est toujours actif ou que l’identificateur n’a pas été recyclé (affecté à un nouveau processus après l’arrêt), sauf si vous conservez un handle ouvert pour le processus.

Identificateur du message Description
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS Indique qu’un processus associé au travail s’est arrêté avec un code de sortie indiquant une sortie anormale (voir la liste qui suit ce tableau).

La valeur de lpOverlapped est l’identificateur du processus de sortie.

JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT Indique que la limite de processus actif a été dépassée.

La valeur de lpOverlapped est NULL.

JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO Indique que le nombre de processus actifs a été décrémenté à 0. Par exemple, si le travail a actuellement deux processus actifs, le système envoie ce message après leur arrêt.

La valeur de lpOverlapped est NULL.

JOB_OBJECT_MSG_END_OF_JOB_TIME Indique que l’option JOB_OBJECT_POST_AT_END_OF_JOB est en vigueur et que la limite de temps de fin de travail a été atteinte. Lors de la publication de ce message, la limite de temps est annulée et les processus du travail peuvent continuer à s’exécuter.

La valeur de lpOverlapped est NULL.

JOB_OBJECT_MSG_END_OF_PROCESS_TIME Indique qu’un processus a dépassé une limite de temps par processus. Le système envoie ce message une fois que l’arrêt du processus a été demandé.

La valeur de lpOverlapped est l’identificateur du processus qui a dépassé sa limite.

JOB_OBJECT_MSG_EXIT_PROCESS Indique qu’un processus associé au travail a été arrêté.

La valeur de lpOverlapped est l’identificateur du processus de sortie.

JOB_OBJECT_MSG_JOB_MEMORY_LIMIT Indique qu’un processus associé au travail a entraîné le dépassement de la limite de mémoire à l’échelle de la tâche (le cas échéant).

La valeur de lpOverlapped spécifie l’identificateur du processus qui a tenté de dépasser la limite. Le système n’envoie pas ce message si le processus n’a pas encore signalé son identificateur de processus.

JOB_OBJECT_MSG_NEW_PROCESS Indique qu’un processus a été ajouté au travail. Les processus ajoutés à un travail au moment où un port d’achèvement est associé sont également signalés.

La valeur de lpOverlapped est l’identificateur du processus ajouté au travail.

JOB_OBJECT_MSG_NOTIFICATION_LIMIT Indique qu’un processus associé à un travail inscrit pour les notifications de limite de ressources a dépassé une ou plusieurs limites. Utilisez la fonction QueryInformationJobObject avec JobObjectLimitViolationInformation pour déterminer la limite qui a été dépassée.

La valeur de lpOverlapped est l’identificateur du processus qui a dépassé sa limite. Le système n’envoie pas ce message si le processus n’a pas encore signalé son identificateur de processus.

JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT Indique qu’un processus associé au travail a dépassé sa limite de mémoire (le cas échéant).

La valeur de lpOverlapped est l’identificateur du processus qui a dépassé sa limite. Le système n’envoie pas ce message si le processus n’a pas encore signalé son identificateur de processus.

 

Les codes de sortie suivants indiquent une sortie anormale :

Vous devez être prudent lorsque vous utilisez les messages JOB_OBJECT_MSG_NEW_PROCESS et JOB_OBJECT_MSG_EXIT_PROCESS, car des conditions de concurrence peuvent se produire. Par instance, si les processus démarrent et quittent activement au sein d’un travail, et que vous êtes en train d’attribuer un port d’achèvement au travail, vous pouvez manquer des messages pour les processus dont l’état change pendant l’association du port d’achèvement. Pour cette raison, il est préférable d’associer un port d’achèvement à un travail lorsque celui-ci est inactif.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
En-tête winnt.h (inclure Windows.h)

Voir aussi

PostQueuedCompletionStatus

QueryInformationJobObject

SetInformationJobObject