structure JOBOBJECT_ASSOCIATE_COMPLETION_PORT (winnt.h)
Contient des 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 les messages sont envoyés pour le compte du travail.
Windows 8 et versions ultérieures, Windows Server 2012 et versions ultérieures : Spécifier NULL pour supprimer l’association entre le port d’achèvement actuel et le travail.
Remarques
Le système envoie des messages au port d’achèvement d’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 ne sont destinés qu’aux notifications et à leur remise au port d’achèvement n’est pas garanti. L’échec d’un message à arriver au port d’achèvement ne signifie pas nécessairement que l’événement n’a pas eu lieu. 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 de 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 d’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 d’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 au processus.
Identificateur de message | Description |
---|---|
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS |
Indique qu’un processus associé au travail s’est arrêté avec un code de sortie qui indique une sortie anormale (consultez la liste suivante 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 active a été dépassée.
La valeur de lpOverlapped est NULL. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO |
Indique que le nombre de processus actif 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 fin.
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 l’arrêt du processus 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 quitté.
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 provoqué le dépassement de la limite de mémoire à l’échelle du travail (si un processus est en vigueur).
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 quelle limite 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 (si un processus est en vigueur).
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 lors de l’utilisation des messages JOB_OBJECT_MSG_NEW_PROCESS et JOB_OBJECT_MSG_EXIT_PROCESS, car des conditions de concurrence peuvent se produire. Par exemple, si les processus démarrent et quittent activement un travail et que vous êtes en train d’affecter un port d’achèvement au travail, vous risquez de manquer des messages pour les processus dont les états changent 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 le travail est inactif.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows XP [applications de bureau uniquement] |
serveur minimum pris en charge | Windows Server 2003 [applications de bureau uniquement] |
d’en-tête | winnt.h (include Windows.h) |