Freigeben über


GetQueuedCompletionStatusEx-Funktion (ioapiset.h)

Ruft mehrere Vervollständigungsporteinträge gleichzeitig ab. Es wartet auf ausstehende E/A-Vorgänge, die dem angegebenen Abschlussport zugeordnet sind, bis er abgeschlossen ist.

Verwenden Sie die GetQueuedCompletionStatus- funktion, um die E/A-Vervollständigungspakete einzeln zu dequeue.

Syntax

BOOL GetQueuedCompletionStatusEx(
  [in]  HANDLE             CompletionPort,
  [out] LPOVERLAPPED_ENTRY lpCompletionPortEntries,
  [in]  ULONG              ulCount,
  [out] PULONG             ulNumEntriesRemoved,
  [in]  DWORD              dwMilliseconds,
  [in]  BOOL               fAlertable
);

Parameter

[in] CompletionPort

Ein Handle zum Abschlussport. Verwenden Sie zum Erstellen eines Abschlussports die CreateIoCompletionPort--Funktion.

[out] lpCompletionPortEntries

Verweist bei der Eingabe auf ein vorab zugeordnetes Array von OVERLAPPED_ENTRY Strukturen.

Bei der Ausgabe empfängt ein Array von OVERLAPPED_ENTRY Strukturen, die die Einträge enthalten. Die Anzahl der Arrayelemente wird von ulNumEntriesRemovedbereitgestellt.

Die Anzahl der während jeder E/A übertragenen Bytes, der Abschlussschlüssel, der angibt, auf welcher Datei jede E/A aufgetreten ist, und die in den ursprünglichen E/A-Adressen verwendete überlappende Strukturadresse werden alle in der lpCompletionPortEntries Array zurückgegeben.

[in] ulCount

Die maximale Anzahl der zu entfernenden Einträge.

[out] ulNumEntriesRemoved

Ein Zeiger auf eine Variable, die die Anzahl der Einträge empfängt, die tatsächlich entfernt wurden.

[in] dwMilliseconds

Die Anzahl der Millisekunden, die der Aufrufer bereit ist, auf ein Abschlusspaket zu warten, das am Abschlussport angezeigt wird. Wenn ein Vervollständigungspaket nicht innerhalb der angegebenen Zeit angezeigt wird, wird die Funktion aus- und gibt FALSE-zurück.

Wenn dwMillisecondsINFINITE (0xFFFFFFFF) ist, wird die Funktion nie timeout. Wenn dwMilliseconds null ist und keine E/A-Operation dequeue vorhanden ist, wird die Funktion sofort timeout.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 und Windows Server 2008 R2: Der dwMilliseconds Wert umfasst Zeit, die in Energiesparzuständen aufgewendet wurde. So wird beispielsweise das Timeout weiter gezählt, während der Computer eingeschlafen ist.

Windows 8 und neuer, Windows Server 2012 und höher: Der wert dwMilliseconds enthält keine Zeit, die in Energiesparzuständen aufgewendet wurde. Beispielsweise wird das Timeout nicht weiter gezählt, während der Computer eingeschlafen ist.

[in] fAlertable

Wenn dieser Parameter FALSEist, wird die Funktion erst zurückgegeben, wenn der Timeoutzeitraum abgelaufen ist oder ein Eintrag abgerufen wird.

Wenn der Parameter TRUE ist und keine verfügbaren Einträge vorhanden sind, führt die Funktion eine warnbare Wartezeit aus. Der Thread gibt zurück, wenn das System eine E/A-Vervollständigungsroutine oder APC in die Warteschlange stellt und der Thread die Funktion ausführt.

Eine Abschlussroutine wird in die Warteschlange gestellt, wenn die ReadFileEx-- oder WriteFileEx- funktion, in der sie angegeben wurde, abgeschlossen wurde, und der aufrufende Thread ist der Thread, der den Vorgang initiiert hat. Ein APC wird in die Warteschlange gestellt, wenn Sie QueueUserAPC-aufrufen.

Rückgabewert

Gibt nonzero (TRUE) zurück, wenn erfolgreich oder null (FALSE) andernfalls.

Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

Diese Funktion ordnet einen Thread dem angegebenen Vervollständigungsport zu. Ein Thread kann höchstens einem Abschlussport zugeordnet werden.

Diese Funktion gibt TRUE zurück, wenn mindestens eine ausstehende E/A abgeschlossen ist, aber es ist möglich, dass mindestens ein E/A-Vorgang fehlgeschlagen ist. Beachten Sie, dass der Benutzer dieser Funktion die Liste der zurückgegebenen Einträge im lpCompletionPortEntries Parameter überprüft, um zu bestimmen, welche dieser Vorgänge möglichen fehlgeschlagenen E/A-Vorgängen entsprechen, indem sie den Status im lpOverlapped Member in jedem OVERLAPPED_ENTRYüberprüfen.

Diese Funktion gibt FALSE- zurück, wenn keine E/A-Operation abgebrochen wurde. Dies bedeutet in der Regel, dass beim Verarbeiten der Parameter für diesen Aufruf ein Fehler aufgetreten ist oder dass das CompletionPort Handle geschlossen wurde oder anderweitig ungültig ist. Die GetLastError--Funktion enthält erweiterte Fehlerinformationen.

Wenn ein Aufruf von GetQueuedCompletionStatusEx fehlschlägt, da das zugeordnete Handle geschlossen ist, gibt die Funktion FALSE- zurück, und GetLastError- gibt ERROR_ABANDONED_WAIT_0zurück.

Serveranwendungen verfügen möglicherweise über mehrere Threads, die den GetQueuedCompletionStatusEx--Funktion für den gleichen Abschlussport aufrufen. Nach Abschluss von E/A-Vorgängen werden sie in die Warteschlange für diesen Port in der Reihenfolge "first-in-first-out" eingereiht. Wenn ein Thread aktiv auf diesen Aufruf wartet, führen mindestens eine in die Warteschlange eingereihte Anforderungen den Aufruf nur für diesen Thread aus.

Weitere Informationen zu E/A-Vervollständigungsporttheorie, Verwendung und zugeordneten Funktionen finden Sie unter E/A-Vervollständigungsports.

In Windows 8 und Windows Server 2012 wird diese Funktion von den folgenden Technologien unterstützt.

Technologie Abgestützt
Server Message Block (SMB) 3.0-Protokoll Ja
SMB 3.0 Transparent Failover (TFO) Ja
SMB 3.0 mit Skalierungsdateifreigaben (SO) Ja
Freigegebenes Clustervolumedateisystem (CsvFS) Ja
Resilient File System (ReFS) Ja

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista [Desktop-Apps | UWP-Apps]
mindestens unterstützte Server- Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform- Fenster
Header- ioapiset.h (include Windows.h)
Library Kernel32.lib
DLL- Kernel32.dll

Siehe auch

ConnectNamedPipe-

CreateIoCompletionPort-

DeviceIoControl-

Dateiverwaltungsfunktionen

Funktionen

GetQueuedCompletionStatusEx

E/A-Vervollständigungsports

LockFileEx-

Übersichtsthemen

PostQueuedCompletionStatus-

ReadFile-

TransactNamedPipe-

Verwenden der Windows-Header

WaitCommEvent-

WriteFile-