Udostępnij przez


Funkcja GetQueuedCompletionStatusEx

Pobiera jednocześnie wiele wpisów portów ukończenia. Czeka na zakończenie oczekujących operacji we/wy skojarzonych z określonym portem zakończenia.

Aby usunąć pakiety ukończenia we/wy pojedynczo, użyj funkcji GetQueuedCompletionStatus .

Składnia

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

Parametry

UkończeniePort[in]

Uchwyt do portu ukończenia. Aby utworzyć port uzupełniania, użyj funkcji CreateIoCompletionPort .

lpCompletionPortWpisy[out]

Na danych wejściowych wskazuje wstępnie przydzieloną tablicę struktur OVERLAPPED_ENTRY .

W danych wyjściowych odbiera tablicę struktur OVERLAPPED_ENTRY , które przechowują wpisy. Liczba elementów tablicy jest dostarczana przez ulNumEntriesRemoved.

Liczba bajtów przesłanych podczas każdego we/wy, klucz ukończenia, który wskazuje, na którym pliku wystąpiło każde we/wy, oraz adres nakładającej się struktury używany w każdym oryginalnym we/wy są zwracane w tablicy lpCompletionPortEntries .

ulCount (ulLiczba)[in]

Maksymalna liczba wpisów do usunięcia.

ulNumEntriesUsunięto[out]

Wskaźnik do zmiennej, która odbiera liczbę faktycznie usuniętych wpisów.

dwMilisekundy[in]

Liczba milisekund, przez którą obiekt wywołujący jest skłonny czekać na pojawienie się pakietu ukończenia na porcie uzupełniania. Jeśli pakiet uzupełniania nie pojawi się w określonym czasie, funkcja przekroczy limit czasu i zwróci FALSE.

Jeśli parametr dwMilliseconds ma wartość INFINITE (0xFFFFFFFF), funkcja nigdy nie przekroczy limitu czasu. Jeśli parametr dwMilliseconds ma wartość zero i nie ma operacji we/wy w celu usunięcia z kolejki, funkcja natychmiast przekroczy limit czasu.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 i Windows Server 2008 R2: Wartość dwMilliseconds obejmuje czas spędzony w stanach niskiego poboru mocy. Na przykład limit czasu jest odliczany, gdy komputer jest uśpiony.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 i Windows Server 2016: Wartość dwMilliseconds nie obejmuje czasu spędzonego w stanach niskiego poboru mocy. Na przykład limit czasu nie jest odliczany, gdy komputer jest uśpiony.

fAlertable[in]

Jeśli ten parametr ma wartość FALSE, funkcja nie jest zwracana, dopóki nie upłynie limit czasu lub nie zostanie pobrany wpis.

Jeśli parametr ma wartość TRUE i nie ma żadnych dostępnych wpisów, funkcja wykonuje oczekiwanie z możliwością alertu. Wątek jest zwracany, gdy system kolejkuje procedurę uzupełniania we/wy lub APC do wątku, a wątek wykonuje funkcję.

Procedura uzupełniania jest umieszczana w kolejce, gdy funkcja ReadFileEx lub WriteFileEx , w której została określona, została zakończona, a wątkiem wywołującym jest wątek, który zainicjował operację. Kontroler APC jest umieszczany w kolejce po wywołaniu metody QueueUserAPC.

Wartość zwracana

Zwraca wartość różną od zera TRUE , jeśli się powiedzie, lub zero FALSE w przeciwnym razie.

Aby uzyskać rozszerzone informacje o błędzie, wywołaj metodę GetLastError.

Uwagi

Ta funkcja kojarzy wątek z określonym portem zakończenia. Wątek może być skojarzony z co najwyżej jednym portem uzupełniania.

Ta funkcja jest zwracana TRUE , gdy co najmniej jedna oczekująca operacja we/wy zostanie ukończona, ale możliwe jest, że co najmniej jedna operacja we/wy nie powiodła się. Należy zauważyć, że to do użytkownika tej funkcji należy sprawdzenie listy zwróconych wpisów w parametrze lpCompletionPortEntries w celu określenia, które z nich odpowiadają wszelkim możliwym nieudanym operacjom we/wy, patrząc na stan zawarty w elemencie członkowskim lpOverlapped w każdym OVERLAPPED_ENTRY.

Ta funkcja jest zwracana FALSE , gdy żadna operacja we/wy nie została usunięta z kolejki. Zazwyczaj oznacza to, że wystąpił błąd podczas przetwarzania parametrów tego wywołania lub że dojście CompletionPort zostało zamknięte lub jest w inny sposób nieprawidłowe. Funkcja GetLastError udostępnia rozszerzone informacje o błędach.

Jeśli wywołanie metody GetQueuedCompletionStatusEx zakończy się niepowodzeniem, ponieważ skojarzone z nim dojście jest zamknięte, funkcja zwraca FALSE wartość i GetLastError zwraca ERROR_ABANDONED_WAIT_0wartość .

Aplikacje serwera mogą mieć kilka wątków wywołujących funkcję GetQueuedCompletionStatusEx dla tego samego portu uzupełniania. Po zakończeniu operacji we/wy są one kolejkowane do tego portu w kolejności "pierwsze weszło, pierwsze wyszło". Jeśli wątek aktywnie oczekuje na to wywołanie, co najmniej jedno żądanie w kolejce kończy wywołanie tylko dla tego wątku.

Aby uzyskać więcej informacji na temat teorii portów uzupełniania we/wy, użycia i skojarzonych funkcji, zobacz Porty uzupełniania we/wy.

W systemach Windows 8 i Windows Server 2012 ta funkcja jest obsługiwana przez następujące technologie.

Technologia Wsparte
Protokół SMB (Server Message Block) 3.0 Tak
Przezroczyste przełączanie awaryjne (TFO) protokołu SMB 3.0 Tak
Protokół SMB 3.0 z udziałami plików skalowalnymi w poziomie (SO) Tak
System plików udostępnionego woluminu klastra (CsvFS) Tak
Odporny system plików (ReFS) Tak

Wymagania

Wymaganie Wartość
Minimalny obsługiwany klient Windows Vista [aplikacje klasyczne | Aplikacje platformy UWP]
Minimalny obsługiwany serwer Windows Server 2008 [aplikacje klasyczne | Aplikacje platformy UWP]
Nagłówek IoAPI.h (w tym Windows.h)
WinBase.h w systemach Windows Server 2008 R2, Windows 7, Windows Server 2008 i Windows Vista (w tym Windows.h)
Biblioteka Kernel32.lib
DLL Kernel32.dll

Zobacz także

Tematy przeglądowe

funkcje zarządzania plikami

porty zakończenia we/wy

Korzystanie z nagłówków systemu Windows

Funkcje

ConnectNamedPipe (Połącz potok o nazwie)

CreateIoCompletionPort

Sterowanie urządzeniem

LockFileEx

Odczyt pliku

PostQueuedCompletionStatus

Potok TransactNamedPipe

Zdarzenie WaitCommEvent

WriteFile (ZapiszPlik)