Condividi tramite


LPFN_RIODEQUEUECOMPLETION funzione di callback (mswsock.h)

La funzione RIODequeueCompletion rimuove le voci da una coda di completamento I/O per l'uso con le estensioni di I/O registrate winsock.

Sintassi

LPFN_RIODEQUEUECOMPLETION LpfnRiodequeuecompletion;

ULONG LpfnRiodequeuecompletion(
  RIO_CQ CQ,
  PRIORESULT Array,
  ULONG ArraySize
)
{...}

Parametri

CQ

Descrittore che identifica una coda di completamento di I/O.

Array

Matrice di strutture RIORESULT per ricevere la descrizione dei completamenti dequeued.

ArraySize

Numero massimo di voci nella matrice da scrivere.

Valore restituito

Se non si verifica alcun errore, la funzione RIODequeueCompletion restituisce il numero di voci di completamento rimosse dalla coda di completamento specificata. In caso contrario, viene restituito un valore di RIO_CORRUPT_CQ per indicare che lo stato del RIO_CQ passato nel parametro CQ è danneggiato a causa del danneggiamento della memoria o dell'uso improprio delle funzioni RIO.

Commenti

La funzione RIODequeueCompletion rimuove le voci da una coda di completamento di I/O per l'invio e la ricezione di richieste con le estensioni di I/O registrate winsock.

La funzione RIODequeueCompletion è il meccanismo in base al quale un'applicazione può individuare le richieste di invio e ricezione completate. Un'applicazione chiama in genere la funzione RIODequeueCompletion dopo aver ricevuto una notifica in base al metodo registrato con la funzione RIONotify quando la coda di completamento non è vuota. Il comportamento di notifica per una coda di completamento di I/O viene impostato quando viene creato il RIO_CQ . La struttura RIO_NOTIFICATION_COMPLETION che determina il comportamento della notifica viene passata alla funzione RIOCreateCompletionQueue quando viene creata una RIO_CQ .

Al termine della funzione RIODequeueCompletion , il parametro Array contiene una matrice di puntatori alle strutture RIORESULT per le richieste di invio e ricezione completate dequeued. I membri delle strutture RIORESULT restituite forniscono informazioni sullo stato di completamento della richiesta completata e sul numero di byte trasferiti. Ogni struttura RIORESULT restituita include anche un contesto socket e un contesto dell'applicazione che può essere usato per identificare la richiesta specifica completata.

Se la coda di completamento I/O passata nel parametro CQ non è valida o danneggiata, la funzione RIODequeueCompletion restituisce un conteggio di RIO_CORRUPT_CQ.

La funzione RIODequeueCompletion restituisce un valore pari a zero se non sono presenti richieste di invio o ricezione completate da annullare la coda.

Solo dopo che il completamento di una richiesta è stata dequeued, il sistema rilascia l'associazione al buffer e alla registrazione del buffer, insieme all'addebito della quota.

Nota

Ai fini dell'efficienza, l'accesso alle code di completamento (struct RIO_CQ ) e alle code delle richieste (RIO_RQ struct) non sono protetti dalle primitive di sincronizzazione. Se è necessario accedere a una coda di completamento o richiesta da più thread, l'accesso deve essere coordinato da una sezione critica, un blocco di scrittura di lettura sottile o un meccanismo simile. Questo blocco non è necessario per l'accesso da un singolo thread. I thread diversi possono accedere a code di completamento/richieste separate senza blocchi. La necessità di sincronizzazione si verifica solo quando più thread tentano di accedere alla stessa coda. La sincronizzazione è necessaria anche se più thread invia e riceve sullo stesso socket perché le operazioni di invio e ricezione usano la coda di richieste del socket.

 

Nota

Il puntatore di funzione alla funzione RIODequeueCompletion deve essere ottenuto in fase di esecuzione effettuando una chiamata alla funzione WSAIoctl con il codice operativo SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER specificato. Il buffer di input passato alla funzione WSAIoctl deve contenere WSAID_MULTIPLE_RIO, un identificatore univoco globale (GUID) il cui valore identifica le funzioni di estensione I/O registrate winsock. In caso di esito positivo, l'output restituito dalla funzione WSAIoctl contiene un puntatore alla struttura RIO_EXTENSION_FUNCTION_TABLE che contiene puntatori alle funzioni di estensione di I/O registrate winsock. Il SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL è definito nel file di intestazione Ws2def.h . Il GUID WSAID_MULTIPLE_RIO è definito nel file di intestazione Mswsock.h .

 

Windows Phone 8: questa funzione è supportata per le app dello Store di Windows Phone in Windows Phone 8 e versioni successive.

Windows 8.1 e Windows Server 2012 R2: questa funzione è supportata per le app di Windows Store in Windows 8.1, Windows Server 2012 R2 e versioni successive.

Thread safety

Se più thread tentano di accedere alla stessa RIO_CQ usando la funzione RIODequeueCompletion , l'accesso deve essere coordinato da una sezione critica, da un blocco del writer lettore sottile o da un meccanismo di esclusione reciproca simile. Se le code di completamento non sono condivise, l'esclusione reciproca non è necessaria.

Requisiti

Requisito Valore
Intestazione mswsock.h