Funzione QueueUserAPC2 (processthreadsapi.h)
Aggiunge un oggetto APC (User-Mode Procedure Call ) alla coda APC del thread specificato.
Sintassi
BOOL QueueUserAPC2(
PAPCFUNC ApcRoutine,
HANDLE Thread,
ULONG_PTR Data,
QUEUE_USER_APC_FLAGS Flags
);
Parametri
ApcRoutine
Puntatore alla funzione APC fornita dall'applicazione da chiamare quando il thread specificato esegue un'operazione di attesa avvisabile. Per altre informazioni, vedere APCProc.
Per le API in modalità utente speciali, non è necessaria un'attesa avvisabile. Per altre informazioni sulle API in modalità utente speciali, vedere Osservazioni .
Thread
Handle per il thread. L'handle deve avere THREAD_SET_CONTEXT autorizzazioni di accesso. Per altre informazioni, vedere Sicurezza oggetti di sincronizzazione e diritti di accesso.
Data
Valore singolo passato alla funzione APC a cui fa riferimento il parametro ApcRoutine .
Flags
Valore dell'enumerazione QUEUE_USER_APC_FLAGS che modifica il comportamento dell'APC in modalità utente.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è diverso da zero.
Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Commenti
Le API in modalità utente regolari vengono eseguite solo se il thread di destinazione è in uno stato avvisabile. Vedere La funzione QueueUserAPC per altre osservazioni sulle API in modalità utente regolari.
Le API in modalità utente speciale eseguono sempre, anche se il thread di destinazione non è in uno stato avvisabile. Ad esempio, se il thread di destinazione sta eseguendo codice in modalità utente o se il thread di destinazione sta eseguendo un'attesa avvisabile, il thread di destinazione verrà interrotto immediatamente per l'esecuzione di APC. Se il thread di destinazione esegue una chiamata di sistema o esegue un'attesa non avvisabile, l'APC verrà eseguito dopo il completamento della chiamata di sistema o dell'attesa non avvisabile (l'attesa non viene interrotta).
Poiché l'esecuzione dell'APC in modalità utente speciale non è sincronizzata con il thread di destinazione, è necessario prestare particolare attenzione (oltre i requisiti normali per il multithreading e la sincronizzazione). Ad esempio, quando si acquisiscono blocchi, il thread di destinazione interrotto può già possedere il blocco o essere nel processo di acquisizione o rilascio del blocco. Inoltre, poiché non sono presenti strutture per impedire a un thread di ricevere API speciali in modalità utente, è possibile eseguire un APC in modalità utente speciale in un thread di destinazione che sta già eseguendo un APC in modalità utente speciale.
Attualmente, le API in modalità utente speciali sono supportate solo nelle architetture native e non quando vengono eseguite in WoW.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 11 (Build 22000) |
Server minimo supportato | Windows Server 2022 (Build 20348) |
Piattaforma di destinazione | Windows |
Intestazione | processthreadsapi.h (includere Windows.h) |
Libreria | Kernel32.lib |
DLL | Kernel32.dll |