GetQueuedCompletionStatusEx-Funktion
Ruft mehrere Vervollständigungsporteinträge gleichzeitig ab. Es wartet auf ausstehende E/A-Vorgänge, die dem angegebenen Abschlussport zugeordnet sind.
Verwenden Sie die GetQueuedCompletionStatus-Funktion , um E/A-Vervollständigungspakete einzeln aus der Warteschlange zu entfernen.
Syntax
BOOL WINAPI GetQueuedCompletionStatusEx(
_In_ HANDLE CompletionPort,
_Out_ LPOVERLAPPED_ENTRY lpCompletionPortEntries,
_In_ ULONG ulCount,
_Out_ PULONG ulNumEntriesRemoved,
_In_ DWORD dwMilliseconds,
_In_ BOOL fAlertable
);
Parameter
-
CompletionPort [in]
-
Ein Handle zum Abschlussport. Verwenden Sie zum Erstellen eines Abschlussports die CreateIoCompletionPort-Funktion .
-
lpCompletionPortEntries [out]
-
Zeigt bei der Eingabe auf ein vorab zugeordnetes Array von OVERLAPPED_ENTRY Strukturen.
Empfängt bei der Ausgabe ein Array von OVERLAPPED_ENTRY Strukturen, die die Einträge enthalten. Die Anzahl der Arrayelemente wird von ulNumEntriesRemoved bereitgestellt.
Die Anzahl der während jeder E/A übertragenen Bytes, der Abschlussschlüssel, der angibt, in welcher Datei die einzelnen E/A-Vorgänge aufgetreten sind, und die in den ursprünglichen E/A-Vorgängen verwendete überlappende Strukturadresse werden alle im LpCompletionPortEntries-Array zurückgegeben.
-
ulCount [in]
-
Die maximale Anzahl der zu entfernenden Einträge.
-
ulNumEntriesRemoved [out]
-
Ein Zeiger auf eine Variable, die die Anzahl der tatsächlich entfernten Einträge empfängt.
-
dwMilliseconds [in]
-
Die Anzahl der Millisekunden, die der Aufrufer bereit ist, auf das Erscheinen eines Abschlusspakets am Abschlussport zu warten. Wenn ein Vervollständigungspaket nicht innerhalb der angegebenen Zeit angezeigt wird, gibt die Funktion ein Timeout aus und gibt FALSE zurück.
Wenn dwMillisecondsINFINITE (0xFFFFFFFF) ist, tritt für die Funktion kein Timeout auf. Wenn dwMilliseconds null ist und kein E/A-Vorgang aus der Warteschlange verschoben werden soll, wird für die Funktion sofort ein Timeout ausgeführt.
Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 und Windows Server 2008 R2: Der DwMilliseconds-Wert enthält die Zeit, die in Energiesparzuständen verbracht wird. Beispielsweise zählt das Timeout weiter, während sich der Computer im Ruhezustand befindet.
Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 und Windows Server 2016: Der DwMilliseconds-Wert enthält keine Zeit, die bei niedriger Leistung aufgewendet wurde. Staaten. Beispielsweise zählt das Timeout nicht weiter, während sich der Computer im Ruhezustand befindet.
-
fAlertable [in]
-
Wenn dieser Parameter FALSE ist, wird die Funktion erst zurückgegeben, wenn der Timeoutzeitraum abgelaufen ist oder ein Eintrag abgerufen wird.
Wenn der Parameter TRUE ist und keine Einträge verfügbar sind, führt die Funktion einen warnbaren Wartevorgang aus. Der Thread gibt zurück, wenn das System eine E/A-Vervollständigungsroutine oder APC im Thread in die Warteschlange stellt und der Thread die Funktion ausführt.
Eine Vervollständigungsroutine wird in die Warteschlange gestellt, wenn die ReadFileEx - oder WriteFileEx-Funktion , in der sie angegeben wurde, abgeschlossen wurde, und der aufrufende Thread der Thread ist, der den Vorgang initiiert hat. Ein APC wird in die Warteschlange eingereiht, wenn Sie QueueUserAPC aufrufen.
Rückgabewert
Gibt ungleich Null (TRUE) zurück, wenn erfolgreich war, oder andernfalls null (FALSE).
Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Bemerkungen
Diese Funktion ordnet einen Thread dem angegebenen Abschlussport 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 ein oder mehrere E/A-Vorgänge fehlgeschlagen sind. Beachten Sie, dass es aufgabe des Benutzers dieser Funktion ist, die Liste der zurückgegebenen Einträge im lpCompletionPortEntries-Parameter zu überprüfen, um zu bestimmen, welche von ihnen möglichen fehlgeschlagenen E/A-Vorgängen entsprechen, indem die status im lpOverlapped-Member in jedem OVERLAPPED_ENTRY enthalten sind.
Diese Funktion gibt FALSE zurück, wenn kein E/A-Vorgang entfernt wurde. Dies bedeutet in der Regel, dass bei der Verarbeitung 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 stellt erweiterte Fehlerinformationen bereit.
Wenn ein Aufruf von GetQueuedCompletionStatusEx fehlschlägt , weil das zugeordnete Handle geschlossen ist, gibt die Funktion FALSE zurück, und GetLastError gibt ERROR_ABANDONED_WAIT_0 zurück.
Serveranwendungen können über mehrere Threads verfügen, die die GetQueuedCompletionStatusEx-Funktion für denselben Abschlussport aufrufen. Nach Abschluss von E/A-Vorgängen werden sie in der First-In-First-Out-Reihenfolge an diesem Port in die Warteschlange gestellt. Wenn ein Thread aktiv auf diesen Aufruf wartet, schließen mindestens eine Anforderung in der Warteschlange den Aufruf für diesen Thread ab.
Weitere Informationen zur E/A-Vervollständigung von Ports, zur Verwendung und zu den zugehörigen Funktionen finden Sie unter E/A-Abschlussports.
In Windows 8 und Windows Server 2012 wird diese Funktion von den folgenden Technologien unterstützt.
Technologie | Unterstützt |
---|---|
Server Message Block (SMB) 3.0-Protokoll |
Ja |
SMB 3.0 Transparent Failover (TFO) |
Ja |
SMB 3.0 mit Dateifreigaben für horizontales Skalieren (SO) |
Ja |
Freigegebenes Clustervolume-Dateisystem (CsvFS) |
Ja |
Robustes Dateisystem (Resilient File System, ReFS) |
Ja |
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) |
Windows Vista [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) |
Windows Server 2008 [Desktop-Apps | UWP-Apps] |
Header |
|
Bibliothek |
|
DLL |
|