Condividi tramite


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