struttura JOBOBJECT_ASSOCIATE_COMPLETION_PORT (winnt.h)
Contiene informazioni utilizzate per associare una porta di completamento a un processo. È possibile associare una porta di completamento a un processo.
Sintassi
typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
PVOID CompletionKey;
HANDLE CompletionPort;
} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
Members
CompletionKey
Valore da utilizzare nel parametro dwCompletionKey di PostQueuedCompletionStatus quando i messaggi vengono inviati per conto del processo.
CompletionPort
Porta di completamento da utilizzare nel parametro CompletionPort della funzione PostQueuedCompletionStatus quando i messaggi vengono inviati per conto del processo.
Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 e Windows Server 2016: specificare NULL per rimuovere l'associazione tra l'oggetto corrente porta di completamento e processo.
Commenti
Il sistema invia messaggi alla porta di completamento di I/O associata a un processo quando si verificano determinati eventi. Se il processo è annidato, il messaggio viene inviato a ogni porta di completamento di I/O associata a qualsiasi processo nella catena di processi padre del processo che ha attivato il messaggio. Tutti i messaggi vengono inviati direttamente dal processo come se il processo avesse chiamato la funzione PostQueuedCompletionStatus .
Si noti che, ad eccezione dei limiti impostati con la classe di informazioni JobObjectNotificationLimitInformation , i messaggi sono destinati solo come notifiche e il loro recapito alla porta di completamento non è garantito. L'errore di un messaggio per arrivare alla porta di completamento non significa necessariamente che l'evento non si sia verificato. Le notifiche per i limiti impostati con JobObjectNotificationLimitInformation sono garantite per arrivare alla porta di completamento.
Un thread deve monitorare la porta di completamento usando la funzione GetQueuedCompletionStatus per raccogliere i messaggi. Il thread riceve informazioni nei parametri GetQueuedCompletionStatus illustrati nella tabella seguente.
Parametro | Informazioni ricevute |
---|---|
lpCompletionKey | Valore specificato in CompletionKey durante l'associazione di porte di completamento. Se una porta di completamento è associata a più processi, CompletionKey deve aiutare il chiamante a determinare quale porta di completamento sta inviando un messaggio. |
lpOverlapped | Valore specifico del messaggio. Per altre informazioni, vedere la tabella seguente di identificatori di messaggio. |
LpNumberOfBytes | Identificatore del messaggio che indica quale evento correlato al processo si è verificato. Per altre informazioni, vedere la tabella seguente di identificatori di messaggio. |
I messaggi seguenti possono essere inviati alla porta di completamento. Si noti che per i messaggi che restituiscono un identificatore di processo, non è possibile garantire che il processo sia ancora attivo o che l'identificatore non sia stato riciclato (assegnato a un nuovo processo dopo la terminazione) a meno che non si mantenga un handle aperto per il processo.
Identificatore del messaggio | Descrizione |
---|---|
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS |
Indica che un processo associato al processo è stato chiuso con un codice di uscita che indica un'uscita anomala (vedere l'elenco che segue questa tabella).
Il valore di lpOverlapped è l'identificatore del processo di uscita. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT |
Indica che il limite del processo attivo è stato superato.
Il valore di lpOverlapped è NULL. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO |
Indica che il numero di processi attivi è stato decrementato su 0. Ad esempio, se il processo ha attualmente due processi attivi, il sistema invia questo messaggio dopo che entrambi terminano.
Il valore di lpOverlapped è NULL. |
JOB_OBJECT_MSG_END_OF_JOB_TIME |
Indica che l'opzione JOB_OBJECT_POST_AT_END_OF_JOB è attiva e che è stato raggiunto il limite di tempo di fine processo. Al momento della pubblicazione di questo messaggio, il limite di tempo viene annullato e i processi del processo possono continuare a essere eseguiti.
Il valore di lpOverlapped è NULL. |
JOB_OBJECT_MSG_END_OF_PROCESS_TIME |
Indica che un processo ha superato un limite di tempo per processo. Il sistema invia questo messaggio dopo la chiusura del processo.
Il valore di lpOverlapped è l'identificatore del processo che ha superato il limite. |
JOB_OBJECT_MSG_EXIT_PROCESS |
Indica che è stato chiuso un processo associato al processo.
Il valore di lpOverlapped è l'identificatore del processo di uscita. |
JOB_OBJECT_MSG_JOB_MEMORY_LIMIT |
Indica che un processo associato al processo ha causato il superamento del limite di memoria a livello di processo (se è attivo).
Il valore di lpOverlapped specifica l'identificatore del processo che ha tentato di superare il limite. Il sistema non invia questo messaggio se il processo non ha ancora segnalato l'identificatore del processo. |
JOB_OBJECT_MSG_NEW_PROCESS |
Indica che un processo è stato aggiunto al processo. Vengono segnalati anche i processi aggiunti a un processo al momento in cui viene associata una porta di completamento.
Il valore di lpOverlapped è l'identificatore del processo aggiunto al processo. |
JOB_OBJECT_MSG_NOTIFICATION_LIMIT |
Indica che un processo associato a un processo registrato per le notifiche relative al limite di risorse ha superato uno o più limiti. Usare la funzione QueryInformationJobObject con JobObjectLimitViolationInformation per determinare quale limite è stato superato.
Il valore di lpOverlapped è l'identificatore del processo che ha superato il limite. Il sistema non invia questo messaggio se il processo non ha ancora segnalato l'identificatore del processo. |
JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT |
Indica che un processo associato al processo ha superato il limite di memoria (se è attivo).
Il valore di lpOverlapped è l'identificatore del processo che ha superato il limite. Il sistema non invia questo messaggio se il processo non ha ancora segnalato l'identificatore del processo. |
I codici di uscita seguenti indicano un'uscita anomala:
È necessario prestare attenzione quando si usano i messaggi JOB_OBJECT_MSG_NEW_PROCESS e JOB_OBJECT_MSG_EXIT_PROCESS, perché possono verificarsi race condition. Ad esempio, se i processi vengono avviati e usciti attivamente all'interno di un processo e si sta eseguendo il processo di assegnazione di una porta di completamento al processo, è possibile che si verifichino messaggi per i processi i cui stati cambiano durante l'associazione della porta di completamento. Per questo motivo, è consigliabile associare una porta di completamento a un processo quando il processo è inattivo.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Intestazione | winnt.h (include Windows.h) |
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per