Sdílet prostřednictvím


Funkce GetQueuedCompletionStatusEx

Načte více položek portu dokončení současně. Čeká na dokončení čekajících vstupně-výstupních operací, které jsou přidruženy k určenému portu dokončení.

Chcete-li vyřadit pakety pro dokončení vstupně-výstupních operací jeden po druhém, použijte funkci GetQueuedCompletionStatus .

Syntaxe

BOOL WINAPI GetQueuedCompletionStatusEx(
  _In_  HANDLE             CompletionPort,
  _Out_ LPOVERLAPPED_ENTRY lpCompletionPortEntries,
  _In_  ULONG              ulCount,
  _Out_ PULONG             ulNumEntriesRemoved,
  _In_  DWORD              dwMilliseconds,
  _In_  BOOL               fAlertable
);

Parametry

CompletionPort[in]

Popisovač portu pro dokončení. Chcete-li vytvořit port pro dokončení, použijte funkci CreateIoCompletionPort .

lpCompletionPortEntries[out]

Na vstupu odkazuje na předem přidělené pole OVERLAPPED_ENTRY struktur.

Na výstupu obdrží pole OVERLAPPED_ENTRY struktur, které obsahují položky. Počet prvků pole poskytuje ulNumEntriesRemoved.

Počet bajtů přenesených během každého vstupně-výstupního operace, klíč dokončení, který označuje, u kterého souboru došlo ke každému vstupně-výstupnímu operací, a adresa překrývající se struktury použitá v každém původním vstupně-výstupním směru, to vše je vráceno v poli lpCompletionPortEntry .

Nástroj ulCount[in]

Maximální počet položek, které mají být odstraněny.

ulNumEntriesRemoved[out]

Ukazatel na proměnnou, která přijímá počet skutečně odebraných položek.

dwMillisekundy[in]

Počet milisekund, po které je volající ochoten čekat, než se paket pro dokončení objeví na portu pro dokončení. Pokud se paket pro dokončení neobjeví ve stanoveném čase, vyprší časový limit funkce a vrátí se FALSE.

Pokud je parametr dwMillisecondsINFINITE (0xFFFFFFFF), funkce nikdy nevyprší časový limit. Pokud je hodnota dwMilliseconds nula a neexistuje žádná vstupně-výstupní operace, která by se vyřadila z fronty, okamžitě vyprší časový limit funkce.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 a Windows Server 2008 R2: Hodnota dwMilliseconds zahrnuje čas strávený ve stavech nízké spotřeby. Časový limit se například odpočítává, když je počítač v režimu spánku.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 a Windows Server 2016: Hodnota dwMilliseconds nezahrnuje čas strávený ve stavech nízké spotřeby. Časový limit se například neodpočítává, když je počítač v režimu spánku.

fAlertable[in]

Pokud je FALSEtento parametr , funkce se nevrátí, dokud neuplyne časový limit nebo dokud není načtena položka.

Pokud je parametr a TRUE nejsou k dispozici žádné položky, funkce provede čekání s upozorněním. Vlákno se vrátí, když systém zařadí rutinu pro dokončování vstupně-výstupních operací nebo APC do vlákna a vlákno provede funkci.

Rutina dokončení je zařazena do fronty, když je dokončena funkce ReadFileEx nebo WriteFileEx , ve které byla určena, a volající vlákno je vlákno, které operaci iniciovalo. APC je zařazen do fronty při volání QueueUserAPC.

Návratová hodnota

V případě úspěchu vrátí nenulovou TRUE hodnotu nebo v opačném případě nulu FALSE .

Chcete-li získat rozšířené informace o chybě, zavolejte GetLastError.

Poznámky

Tato funkce přidruží vlákno k určenému portu dokončení. Vlákno může být přidruženo maximálně k jednomu portu dokončení.

Tato funkce se vrátí TRUE , když je dokončena alespoň jedna čekající vstupně-výstupní operace, ale je možné, že jedna nebo více vstupně-výstupních operací selhala. Všimněte si, že je na uživateli této funkce, aby zkontroloval seznam vrácených položek v parametru lpCompletionPortEntries a určil, které z nich odpovídají všem možným neúspěšným vstupně-výstupním operacím, a to tak, že se podívá na stav obsažený v členu lpOverlapped v každém OVERLAPPED_ENTRY.

Tato funkce se vrátí FALSE , pokud nebyla vyřazena žádná vstupně-výstupní operace. To obvykle znamená, že při zpracování parametrů tohoto volání došlo k chybě nebo že popisovač CompletionPort byl uzavřen nebo je jinak neplatný. Funkce GetLastError poskytuje rozšířené informace o chybách.

Pokud se volání metody GetQueuedCompletionStatusEx nezdaří, protože popisovač s ní spojený je uzavřen, funkce se vrátí FALSE a funkce GetLastError vrátí .ERROR_ABANDONED_WAIT_0

Serverové aplikace mohou mít několik vláken, která volají funkci GetQueuedCompletionStatusEx pro stejný port dokončení. Po dokončení vstupně-výstupních operací jsou tyto operace zařazeny do fronty na tento port v pořadí "kdo dřív přijde, ten dřív odejde". Pokud vlákno aktivně čeká na toto volání, jeden nebo více požadavků ve frontě dokončí volání pouze pro toto vlákno.

Další informace o teorii portů pro doplňování vstupně-výstupních operací, jejich použití a souvisejících funkcích naleznete v tématu Porty pro doplňování vstupně-výstupních operací.

Ve Windows 8 a Windows Server 2012 je tato funkce podporována následujícími technologiemi.

Technologie Podporováno
Protokol SMB (Server Message Block) 3.0 Ano
Transparentní převzetí služeb při selhání (TFO) protokolu SMB 3.0 Ano
SMB 3.0 se sdílenými složkami se škálováním na více systémů Ano
Systém souborů sdílených svazků clusteru (CsvFS) Ano
Odolný systém souborů (ReFS) Ano

Požadavky

Požadavek Hodnota
Minimální podporovaný klient Windows Vista [aplikace pro stolní počítače | Aplikace pro UPW]
Minimální podporovaný server Windows Server 2008 [aplikace pro stolní počítače | Aplikace pro UPW]
Záhlaví IoAPI.h (včetně Windows.h)
WinBase.h v systémech Windows Server 2008 R2, Windows 7, Windows Server 2008 a Windows Vista (včetně Windows.h)
Knihovna Kernel32.lib
Knihovna dll Kernel32.dll

Viz také

Přehledová témata

funkce správy souborů

porty pro dokončování vstupně-výstupních operací

Použití záhlaví systému Windows

Funkce

PřipojitNamedPipe

CreateIoCompletionPort

DeviceIoControl

LockFileEx

ČístSoubor

PostQueuedCompletionStatus

TransactNamedPipe

Událost WaitCommEvent

ZapsatSoubor