GetQueuedCompletionStatus-Funktion (ioapiset.h)
Versucht, ein E/A-Vervollständigungspaket vom angegebenen E/A-Vervollständigungsport zu entqueuen. Wenn kein Vervollständigungspaket in die Warteschlange eingereiht ist, wartet die Funktion auf einen ausstehenden E/A-Vorgang, der dem Abschlussport zugeordnet ist.
Verwenden Sie die GetQueuedCompletionStatusEx--Funktion, um mehrere E/A-Vervollständigungspakete gleichzeitig aufzuholen.
Syntax
BOOL GetQueuedCompletionStatus(
[in] HANDLE CompletionPort,
LPDWORD lpNumberOfBytesTransferred,
[out] PULONG_PTR lpCompletionKey,
[out] LPOVERLAPPED *lpOverlapped,
[in] DWORD dwMilliseconds
);
Parameter
[in] CompletionPort
Ein Handle zum Abschlussport. Verwenden Sie zum Erstellen eines Abschlussports die CreateIoCompletionPort--Funktion.
lpNumberOfBytesTransferred
Ein Zeiger auf eine Variable, die die Anzahl der in einem abgeschlossenen E/A-Vorgang übertragenen Bytes empfängt.
[out] lpCompletionKey
Ein Zeiger auf eine Variable, die den Abschlussschlüsselwert empfängt, der dem Dateihandle zugeordnet ist, dessen E/A-Vorgang abgeschlossen wurde. Ein Abschlussschlüssel ist ein Dateischlüssel, der in einem Aufruf von CreateIoCompletionPortangegeben wird.
[out] lpOverlapped
Ein Zeiger auf eine Variable, die die Adresse der OVERLAPPED Struktur empfängt, die beim Starten des abgeschlossenen E/A-Vorgangs angegeben wurde.
Auch wenn Sie die Funktion über ein Dateihandle übergeben haben, das einem Vervollständigungsport zugeordnet ist, und einer gültigen OVERLAPPED-Struktur, kann eine Anwendung die Benachrichtigung über den Abschlussport verhindern. Dazu geben Sie ein gültiges Ereignishandle für das hEvent Member der OVERLAPPED-Struktur an und legen das Bit mit niedriger Reihenfolge fest. Ein gültiges Ereignishandle, dessen Bit mit niedriger Reihenfolge festgelegt ist, verhindert, dass der Abschluss des überlappenden E/A-Pakets an den Abschlussport gesendet wird.
[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, gibt die Funktion ein Timeout zurück, gibt FALSE-zurück und legt *lpOverlapped- auf NULL-fest.
Wenn dwMillisecondsINFINITEist, 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.
Rückgabewert
Gibt nonzero (TRUE) zurück, wenn erfolgreich oder null (FALSE) andernfalls.
Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.
Weitere Informationen finden Sie im Abschnitt "Hinweise".
Bemerkungen
Diese Funktion ordnet einen Thread dem angegebenen Vervollständigungsport zu. Ein Thread kann höchstens einem Abschlussport zugeordnet werden.
Wenn ein Aufruf von GetQueuedCompletionStatus fehlschlägt, da der Abschlussporthandle geschlossen wird, während der Aufruf ausfällt, gibt die Funktion FALSEzurück, *lpOverlapped wird NULL-, und GetLastError wird ERROR_ABANDONED_WAIT_0zurückgegeben.
Windows Server 2003 und Windows XP: Schließen des Abschlussporthandles, während ein Aufruf ausstehender Aufruf nicht zum zuvor angegebenen Verhalten führt. Die Funktion wartet weiterhin, bis ein Eintrag aus dem Port entfernt wird, oder bis ein Timeout auftritt, wenn er als ein anderer Wert als INFINITEangegeben wird.
Wenn die GetQueuedCompletionStatus--Funktion erfolgreich ist, hat sie ein Abschlusspaket für einen erfolgreichen E/A-Vorgang vom Abschlussport entfernt und hat Informationen in den Variablen gespeichert, auf die durch die folgenden Parameter verwiesen wird: lpNumberOfBytes, lpCompletionKeyund lpOverlapped. Wenn ein Fehler auftritt (der Rückgabewert FALSE), können dieselben Parameter bestimmte Wertkombinationen wie folgt enthalten:
- Wenn *lpOverlapped-NULL-ist, hat die Funktion kein Vervollständigungspaket vom Abschlussport aufgehoben. In diesem Fall speichert die Funktion keine Informationen in den Variablen, auf die durch die lpNumberOfBytes und lpCompletionKey Parameter verwiesen werden, und ihre Werte sind unbestimmt.
- Wenn *lpOverlapped- nicht NULL- ist und die Funktion ein Vervollständigungspaket für einen fehlgeschlagenen E/A-Vorgang vom Abschlussport abfragt, speichert die Funktion Informationen zum fehlgeschlagenen Vorgang in den Variablen, auf die durch lpNumberOfBytes, lpCompletionKeyund lpOverlappedverwiesen wird. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.
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 XP [Desktop-Apps | UWP-Apps] |
mindestens unterstützte Server- | Windows Server 2003 [Desktop-Apps | UWP-Apps] |
Zielplattform- | Fenster |
Header- | ioapiset.h (include Windows.h) |
Library | Kernel32.lib |
DLL- | Kernel32.dll |
Siehe auch
Funktionen
Übersichtsthemen