Funzione WPUQueueApc (ws2spi.h)
La funzione WPUQueueApc accoda una chiamata di routine asincrona (APC) in modalità utente al thread specificato per facilitare la chiamata di routine di completamento I/O sovrapposte.
Sintassi
int WPUQueueApc(
[in] LPWSATHREADID lpThreadId,
[in] LPWSAUSERAPC lpfnUserApc,
[in] DWORD_PTR dwContext,
[out] LPINT lpErrno
);
Parametri
[in] lpThreadId
Puntatore a una struttura WSATHREADID che identifica il contesto del thread. Un puntatore a questa struttura viene fornito al provider di servizi dal Ws2_32.dll come parametro di input per un'operazione sovrapposta. Il provider deve archiviare la struttura WSATHREADID in locale e fornire un puntatore a questo archivio locale. La copia locale di WSATHREADID non è più necessaria una volta restituito WPUQueueApc .
[in] lpfnUserApc
Puntatore alla funzione APC da chiamare.
[in] dwContext
Valore di contesto a 32 bit che viene successivamente fornito come parametro di input alla funzione APC.
[out] lpErrno
Puntatore al codice di errore.
Valore restituito
Se non si verifica alcun errore, WPUQueueApc restituisce zero e accoda la routine di completamento per il thread specificato. In caso contrario, restituisce SOCKET_ERROR e un codice di errore specifico è disponibile in lpErrno.
Codice di errore | Significato |
---|---|
Il parametro dwThreadId non specifica un thread valido. |
Commenti
Questa funzione accoda una funzione APC sul thread specificato. In Windows questa operazione verrà eseguita usando una chiamata di routine asincrona in modalità utente (APC). L'APC verrà eseguito solo quando il thread specificato viene bloccato in un'attesa di avviso e verrà eseguito direttamente un callback. Questa chiamata è sicura per l'uso all'interno di un contesto di interrupt.
LPWSAUSERAPC è definito come segue:
typedef void ( CALLBACK FAR * LPWSAUSERAPC )( DWORD dwContext );
Poiché il meccanismo APC supporta solo un singolo valore di contesto, lpfnUserApc stesso non può essere la routine di completamento specificata dal client, che prevede più parametri. Il provider di servizi deve invece fornire un puntatore alla propria funzione APC che utilizza il valore dwContext fornito per accedere alle informazioni sul risultato necessarie per l'operazione sovrapposta e quindi richiama la routine di completamento specificata dal client.
Per i provider di servizi in cui un componente in modalità utente implementa operazioni di I/O sovrapposte, un utilizzo tipico del meccanismo APC è il seguente.
-
- Al termine dell'operazione di I/O, il provider alloca un buffer di piccole dimensioni e lo comprime con un puntatore alla routine di completamento fornita dal client e ai valori dei parametri da passare alla routine.
- Accoda un APC, specificando il puntatore al buffer come valore dwContext e la propria routine intermedia come routine di destinazione lpfnUserApc.
- Quando il thread di destinazione entra in uno stato di attesa avvisabile, la routine intermedia del provider di servizi viene chiamata nel contesto del thread appropriato.
- La routine intermedia decomprime semplicemente i parametri, dealloca il buffer e chiama la procedura di completamento fornita dal client.
Requisiti
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | ws2spi.h |