Fungsi GetQueuedCompletionStatusEx

Mengambil beberapa entri port penyelesaian secara bersamaan. Ini menunggu operasi I/O tertunda yang terkait dengan port penyelesaian yang ditentukan selesai.

Untuk menghapus antrean paket penyelesaian I/O satu per satu, gunakan fungsi GetQueuedCompletionStatus .

Sintaks

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]

Handel ke port penyelesaian. Untuk membuat port penyelesaian, gunakan fungsi CreateIoCompletionPort .

lpCompletionPortEntries [out]

Pada input, menunjuk ke array struktur OVERLAPPED_ENTRY yang telah dialokasikan sebelumnya.

Pada output, menerima array struktur OVERLAPPED_ENTRY yang menyimpan entri. Jumlah elemen array disediakan oleh ulNumEntriesRemoved.

Jumlah byte yang ditransfer selama setiap I/O, kunci penyelesaian yang menunjukkan pada file mana setiap I/O terjadi, dan alamat struktur tumpang tindih yang digunakan di setiap I/O asli semuanya dikembalikan dalam array lpCompletionPortEntries .

ulCount [in]

Jumlah maksimum entri yang akan dihapus.

ulNumEntriesRemoved [out]

Penunjuk ke variabel yang menerima jumlah entri yang benar-benar dihapus.

dwMilliseconds [in]

Jumlah milidetik pemanggil bersedia menunggu paket penyelesaian muncul di port penyelesaian. Jika paket penyelesaian tidak muncul dalam waktu yang ditentukan, waktu fungsi habis dan mengembalikan FALSE.

Jika dwMilliseconds adalah INFINITE (0xFFFFFFFF), fungsi tidak akan pernah kehabisan waktu. Jika dwMilliseconds adalah nol dan tidak ada operasi I/O untuk menghapus antrean, fungsi akan segera kehabisan waktu.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 dan Windows Server 2008 R2: Nilai dwMilliseconds memang mencakup waktu yang dihabiskan dalam status berdaya rendah. Misalnya, batas waktu terus menghitung mundur saat komputer tertidur.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 dan Windows Server 2016: Nilai dwMilliseconds tidak termasuk waktu yang dihabiskan dalam status berdaya rendah. Misalnya, batas waktu tidak terus menghitung mundur saat komputer tertidur.

fAlertable [in]

Jika parameter ini FALSE, fungsi tidak kembali sampai periode waktu habis berlalu atau entri diambil.

Jika parameter true dan tidak ada entri yang tersedia, fungsi akan melakukan penantian yang dapat diperingatkan. Utas kembali ketika sistem mengantrekan rutinitas penyelesaian I/O atau APC ke utas dan utas menjalankan fungsi.

Rutinitas penyelesaian diantrekan ketika fungsi ReadFileEx atau WriteFileEx yang ditentukan telah selesai, dan utas panggilan adalah utas yang memulai operasi. APC diantrekan saat Anda memanggil QueueUserAPC.

Menampilkan nilai

Mengembalikan bukan nol (TRUE) jika berhasil atau nol (FALSE) jika tidak.

Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Fungsi ini mengaitkan utas dengan port penyelesaian yang ditentukan. Utas dapat dikaitkan dengan paling banyak satu port penyelesaian.

Fungsi ini mengembalikan TRUE ketika setidaknya satu I/O yang tertunda selesai, tetapi ada kemungkinan bahwa satu atau beberapa operasi I/O gagal. Perhatikan bahwa terserah pengguna fungsi ini untuk memeriksa daftar entri yang dikembalikan dalam parameter lpCompletionPortEntries untuk menentukan mana yang sesuai dengan kemungkinan operasi I/O yang gagal dengan melihat status yang terkandung dalam anggota lpOverlapped di setiap OVERLAPPED_ENTRY.

Fungsi ini mengembalikan FALSE ketika tidak ada operasi I/O yang dibatalkan antreannya. Ini biasanya berarti bahwa kesalahan terjadi saat memproses parameter untuk panggilan ini, atau bahwa handel CompletionPort ditutup atau tidak valid. Fungsi GetLastError menyediakan informasi kesalahan yang diperluas.

Jika panggilan ke GetQueuedCompletionStatusEx gagal karena handel yang terkait dengannya ditutup, fungsi mengembalikan FALSE dan GetLastError akan mengembalikan ERROR_ABANDONED_WAIT_0.

Aplikasi server mungkin memiliki beberapa utas yang memanggil fungsi GetQueuedCompletionStatusEx untuk port penyelesaian yang sama. Setelah operasi I/O selesai, mereka diantrekan ke port ini dalam urutan pertama kali keluar. Jika utas secara aktif menunggu panggilan ini, satu atau beberapa permintaan antrean menyelesaikan panggilan untuk utas tersebut saja.

Untuk informasi selengkapnya tentang teori, penggunaan, dan fungsi terkait penyelesaian I/O, lihat Port Penyelesaian I/O.

Di Windows 8 dan Windows Server 2012, fungsi ini didukung oleh teknologi berikut.

Teknologi Didukung
Protokol Server Message Block (SMB) 3.0
Ya
SMB 3.0 Transparent Failover (TFO)
Ya
SMB 3.0 dengan Scale-out File Shares (SO)
Ya
Sistem File Volume Bersama Kluster (CsvFS)
Ya
Sistem File Tangguh (ReFS)
Ya

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung
Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Header
IoAPI.h (termasuk Windows.h);
WinBase.h pada Windows Server 2008 R2, Windows 7, Windows Server 2008 dan Windows Vista (termasuk Windows.h)
Pustaka
Kernel32.lib
DLL
Kernel32.dll

Lihat juga

Topik Gambaran Umum

Fungsi Manajemen File

Port Penyelesaian I/O

Menggunakan Header Windows

Fungsi

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

GetQueuedCompletionStatusEx

LockFileEx

ReadFile

PostQueuedCompletionStatus

TransactNamedPipe

WaitCommEvent

WriteFile