RIO _ CQ

Die TYPDEFINITION FÜR DIE _ CQ gibt einen Abschlusswarteschlangendeskriptor an, der für E/A-Abschlussbenachrichtigungen verwendet wird, indem Anforderungen mit den bei Winsock registrierten E/A-Erweiterungen gesendet und empfangen werden.

typedef struct RIO_CQ_t* RIO_CQ, **PRIO_CQ;

RIO _ CQ

Ein Datentyp, der einen Abschlusswarteschlangendeskriptor angibt, der für E/A-Abschlussbenachrichtigungen durch Senden und Empfangen von Anforderungen verwendet wird.

Hinweise

Das RIO _ CQ-Objekt wird für E/A-Abschlussbenachrichtigungen zum Senden und Empfangen von Netzwerkanforderungen durch die bei Winsock registrierten E/A-Erweiterungen verwendet.

Eine Anwendung kann mit der FUNKTION RIONotify eine Benachrichtigung anfordern, wenn eine _ CQ-Abschlusswarteschlange nicht leer ist. Eine Anwendung kann den Status einer WAR _ CQ-Warteschlange auch jederzeit auf nicht blockierende Weise mithilfe der FUNKTION RIODequeueCompletion abbestellen.

Das RIO _ CQ-Objekt wird mithilfe der FUNKTION RIOCreateCompletionQueue erstellt. Zum Zeitpunkt der Erstellung muss die Anwendung die Größe der Warteschlange angeben, die bestimmt, wie viele Vervollständigungseinträge sie enthalten kann. Wenn eine Anwendung die FUNKTION RIOCreateRequestQueue aufruft, um ein RIO _ RQ-Handle zu erhalten, muss die Anwendung ein RIO _ CQ-Handle für Sendeabschlusse und ein RIO _ CQ-Handle für Empfangsabschlusse angeben. Diese Handles sind möglicherweise identisch, wenn dieselbe Warteschlange für den Sende- und Empfangsabschluss verwendet werden soll. Die FUNKTION RIOCreateRequestQueue erfordert auch eine maximale Anzahl ausstehender Sende- und Empfangsvorgänge, die für die Kapazität der zugeordneten Abschlusswarteschlangen in Rechnung gestellt werden. Wenn die Warteschlangen nicht über genügend Kapazität verfügen, wird beim AUFRUF VON RIOCreateRequestQueue mit WSAENOBUFS ein Fehler angezeigt.

Das Benachrichtigungsverhalten für eine Vervollständigungswarteschlange wird festgelegt, wenn DIE _ CQ-Instanz erstellt wird.

Für eine Vervollständigungswarteschlange, die ein Ereignis verwendet, wird das Type-Member der STRUKTUR VON RIO NOTIFICATION _ _ COMPLETION auf RIO EVENT COMPLETION _ _ festgelegt. Der Event.EventHandle-Member sollte das Handle für ein Ereignis enthalten, das von der WSACreateEvent- oder CreateEvent-Funktion erstellt wurde. Um den ABSCHLUSS von ROUNOTify zu erhalten, sollte die Anwendung mit WSAWaitForMultipleEvents oder einer ähnlichen Warteroutine auf das angegebene Ereignishandl warten. Wenn die Anwendung das Ereignis zurücksetzen und wiederverwenden soll, kann die Anwendung den Mehraufwand reduzieren, indem das Event.NotifyReset-Member auf einen Wert von nicht 0 (null) gesetzt wird. Dies bewirkt, dass das Ereignis automatisch von der FUNKTION RIONotify zurückgesetzt wird, wenn die Benachrichtigung auftritt. Dadurch entschärft sich die Notwendigkeit, die WSAResetEvent-Funktion aufzurufen, um das Ereignis zwischen Aufrufen der FUNKTION AMENotify zurückzusetzen.

Für eine Vervollständigungswarteschlange, die einen E/A-Vervollständigungsport verwendet, wird das Type-Member der STRUKTUR VON NOTIFICATION NOTIFICATION _ _ COMPLETION auf RIO _ IOCP COMPLETION _ festgelegt. Der Iocp.IocpHandle-Member sollte das Handle für einen E/A-Abschlussport enthalten, der von der CreateIoCompletionPort-Funktion erstellt wurde. Die Anwendung sollte die GetQueuedCompletionStatus- oder GetQueuedCompletionStatusEx-Funktion aufrufen, um die BEENDIGUNG ZU ERHALTEN. Die Anwendung sollte ein dediziertes OVERLAPPED-Objekt für die Vervollständigungswarteschlange bereitstellen und auch das Iocp.CompletionKey-Mitglied verwenden, um DIE NOTify-Anforderungen in der Vervollständigungswarteschlange von anderen E/A-Vervollständigungen zu unterscheiden, einschließlich DER NOTIFY-Vervollständigungen für andere Vervollständigungswarteschlangen.

Hinweis

Aus Effizienzgründen wird der Zugriff auf die Vervollständigungswarteschlangen (RIO _ CQ-Strukturen) und Anforderungswarteschlangen (RIO _ RQ-Strukturen) nicht durch Synchronisierungsprimitiven geschützt. Wenn Sie von mehreren Threads aus auf eine Abschluss- oder Anforderungswarteschlange zugreifen müssen, sollte der Zugriff von einem kritischen Abschnitt, einer Schreibsperre für Den Reader oder einem ähnlichen Mechanismus koordiniert werden. Diese Sperrung ist für den Zugriff durch einen einzelnen Thread nicht erforderlich. Verschiedene Threads können ohne Sperren auf separate Anforderungen/Vervollständigungswarteschlangen zugreifen. Die Synchronisierung ist nur erforderlich, wenn mehrere Threads versuchen, auf dieselbe Warteschlange zu zugreifen. Eine Synchronisierung ist auch erforderlich, wenn mehrere Threads über denselben Socket senden und empfangen, da die Sende- und Empfangsvorgänge die Anforderungswarteschlange des Sockets verwenden.

Wenn mehrere Threads versuchen, mithilfe von RIODequeueCompletionauf dasselbe RIO _ CQ zu zugreifen, muss der Zugriff durch einen kritischen Abschnitt, eine Reader-Writersperre oder einen ähnlichen Mechanismus für gegenseitigen Ausschluss koordiniert werden. Wenn die Abschlusswarteschlangen nicht freigegeben werden, ist kein gegenseitiger Ausschluss erforderlich.

Wenn eine Vervollständigungswarteschlange nicht mehr benötigt wird, kann eine Anwendung sie mithilfe der FUNKTION RIOCloseCompletionQueue schließen.

Die _ TYPDEFINITION FÜR DIE CQ-Datei wird in der Headerdatei "Mswsockdef.h" definiert, die automatisch in der Headerdatei "Mswsock.h" enthalten ist. Die Headerdatei "Mswsockdef.h" sollte nie direkt verwendet werden.

Threadsicherheit

Wenn mehrere Threads versuchen, mithilfe von RIODequeueCompletionauf dasselbe RIO _ CQ zu zugreifen, muss der Zugriff durch einen kritischen Abschnitt, eine Reader-Writersperre oder einen ähnlichen Mechanismus für gegenseitigen Ausschluss koordiniert werden. Wenn die Abschlusswarteschlangen nicht freigegeben werden, ist kein gegenseitiger Ausschluss erforderlich.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
[Windows 8 Nur Desktop-Apps]
Unterstützte Mindestversion (Server)
[Windows Server 2012 Nur Desktop-Apps]
Header
Mswsockdef.h (einschließlich Mswsock.h)

Siehe auch

CreateIoCompletionPort

Createevent

GetQueuedCompletionStatus

GetQueuedCompletionStatusEx

Überlappende

_VERVOLLSTÄNDIGUNG DER _ NOTIFICATION-NACHRICHT IN RIO

_VERVOLLSTÄNDIGUNGSTYP "RIO _ _ NOTIFICATION"

RIO _ RQ

RIOCloseCompletionQueue

RIOCreateCompletionQueue

RIOCreateRequestQueue

RIODequeueCompletion

RIONotify

WSACreateEvent

WSAResetEvent

WSAWaitForMultipleEvents