LPFN_RIODEQUEUECOMPLETION fonction de rappel (mswsock.h)
La fonction RIODequeueCompletion supprime des entrées d’une file d’attente d’achèvement d’E/S pour une utilisation avec les extensions d’E/S inscrites winsock.
Syntaxe
LPFN_RIODEQUEUECOMPLETION LpfnRiodequeuecompletion;
ULONG LpfnRiodequeuecompletion(
RIO_CQ CQ,
PRIORESULT Array,
ULONG ArraySize
)
{...}
Paramètres
CQ
Descripteur qui identifie une file d’attente d’achèvement des E/S.
Array
Tableau de structures RIORESULT pour recevoir la description des achèvements mis en file d’attente.
ArraySize
Nombre maximal d’entrées dans le tableau à écrire.
Valeur retournée
Si aucune erreur ne se produit, la fonction RIODequeueCompletion retourne le nombre d’entrées d’achèvement supprimées de la file d’attente d’achèvement spécifiée. Sinon, une valeur de RIO_CORRUPT_CQ est retournée pour indiquer que l’état du RIO_CQ passé dans le paramètre CQ est endommagé en raison d’une altération de la mémoire ou d’une mauvaise utilisation des fonctions RIO.
Remarques
La fonction RIODequeueCompletion supprime les entrées d’une file d’attente d’achèvement d’E/S pour envoyer et recevoir des demandes avec les extensions d’E/S inscrites dans Winsock.
La fonction RIODequeueCompletion est le mécanisme par lequel une application peut découvrir les demandes d’envoi et de réception terminées. Une application appelle normalement la fonction RIODequeueCompletion après avoir reçu une notification basée sur la méthode inscrite auprès de la fonction RIONotify lorsque la file d’attente d’achèvement n’est pas vide. Le comportement de notification d’une file d’attente d’achèvement des E/S est défini lors de la création du RIO_CQ . La structure RIO_NOTIFICATION_COMPLETION qui détermine le comportement de notification est passée à la fonction RIOCreateCompletionQueue lors de la création d’un RIO_CQ .
Une fois la fonction RIODequeueCompletion terminée, le paramètre Array contient un tableau de pointeurs vers des structures RIORESULT pour les demandes d’envoi et de réception terminées qui ont été supprimées de la file d’attente. Les membres des structures RIORESULT retournées fournissent des informations sur la status d’achèvement de la requête terminée et le nombre d’octets transférés. Chaque structure RIORESULT retournée inclut également un contexte de socket et un contexte d’application qui peuvent être utilisés pour identifier la demande terminée spécifique.
Si la file d’attente d’achèvement des E/S passée dans le paramètre CQ n’est pas valide ou endommagée, la fonction RIODequeueCompletion retourne un nombre de RIO_CORRUPT_CQ.
La fonction RIODequeueCompletion retourne une valeur de zéro si aucune demande d’envoi ou de réception n’est terminée.
Ce n’est qu’une fois la requête terminée que la file d’attente a été supprimée que le système libère l’association dans son enregistrement de mémoire tampon et de mémoire tampon, ainsi que ses frais de quota.
Notes
Par souci d’efficacité, l’accès aux files d’attente d’achèvement (RIO_CQ structs) et aux files d’attente de requêtes (RIO_RQ structs) ne sont pas protégés par des primitives de synchronisation. Si vous devez accéder à une file d’attente d’achèvement ou de demandes à partir de plusieurs threads, l’accès doit être coordonné par une section critique, un verrou d’écriture de lecteur mince ou un mécanisme similaire. Ce verrouillage n’est pas nécessaire pour l’accès par un seul thread. Différents threads peuvent accéder à des files d’attente de requêtes/d’achèvement distinctes sans verrous. La synchronisation est nécessaire uniquement lorsque plusieurs threads tentent d’accéder à la même file d’attente. La synchronisation est également nécessaire si plusieurs problèmes de threads envoient et reçoivent sur le même socket, car les opérations d’envoi et de réception utilisent la file d’attente de demandes du socket.
Notes
Le pointeur de fonction vers la fonction RIODequeueCompletion doit être obtenu au moment de l’exécution en effectuant un appel à la fonction WSAIoctl avec le SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode spécifié. La mémoire tampon d’entrée passée à la fonction WSAIoctl doit contenir WSAID_MULTIPLE_RIO, un identificateur global unique (GUID) dont la valeur identifie les fonctions d’extension d’E/S inscrites dans Winsock. En cas de réussite, la sortie retournée par la fonction WSAIoctl contient un pointeur vers la structure RIO_EXTENSION_FUNCTION_TABLE qui contient des pointeurs vers les fonctions d’extension d’E/S inscrites dans Winsock. Le SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL est défini dans le fichier d’en-tête Ws2def.h . Le GUID WSAID_MULTIPLE_RIO est défini dans le fichier d’en-tête Mswsock.h .
Windows Phone 8 : cette fonction est prise en charge pour les applications Windows Phone Store sur Windows Phone 8 et versions ultérieures.
Windows 8.1 et Windows Server 2012 R2 : cette fonction est prise en charge pour les applications du Windows Store sur Windows 8.1, Windows Server 2012 R2 et versions ultérieures.
Cohérence de thread
Si plusieurs threads tentent d’accéder au même RIO_CQ à l’aide de la fonction RIODequeueCompletion , l’accès doit être coordonné par une section critique, un verrou d’enregistreur de lecture mince ou un mécanisme d’exclusion mutuelle similaire. Si les files d’attente d’achèvement ne sont pas partagées, l’exclusion mutuelle n’est pas requise.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | mswsock.h |