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;
Membri
CompletionKey
Valore da utilizzare nel parametro dwCompletionKey
CompletionPort
Porta di completamento da usare nel parametro
Windows 8 e versioni successive, Windows Server 2012 e versioni successive: Specificare NULL per rimuovere l'associazione tra la porta di completamento corrente e il processo.
Osservazioni
Il sistema invia messaggi alla porta di completamento 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 il JobObjectNotificationLimitInformation classe di informazioni, i messaggi sono destinati solo come notifiche e il 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 è 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
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 dovrebbe 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 questo 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 che è stata richiesta la terminazione del processo.
Il valore di lpOverlapped è l'identificatore del processo che ha superato il limite. |
JOB_OBJECT_MSG_EXIT_PROCESS |
Indica che un processo associato al processo è stato chiuso.
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 delle 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, in quanto 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.
Fabbisogno
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) |