RIO_CQ

Typedef RIO_CQ menentukan deskriptor antrean penyelesaian yang digunakan untuk pemberitahuan penyelesaian I/O dengan mengirim dan menerima permintaan dengan ekstensi I/O terdaftar Winsock.

typedef struct RIO_CQ_t* RIO_CQ, **PRIO_CQ;

RIO_CQ

Jenis data yang menentukan deskriptor antrean penyelesaian yang digunakan untuk pemberitahuan penyelesaian I/O dengan mengirim dan menerima permintaan.

Keterangan

Objek RIO_CQ digunakan untuk pemberitahuan penyelesaian I/O untuk mengirim dan menerima permintaan jaringan oleh ekstensi I/O terdaftar Winsock.

Aplikasi dapat menggunakan fungsi RIONotify untuk meminta pemberitahuan ketika antrean penyelesaian RIO_CQ tidak kosong. Aplikasi juga dapat melakukan polling status kapan saja dari antrean penyelesaian RIO_CQ dengan cara yang tidak memblokir menggunakan fungsi RIODequeueCompletion .

Objek RIO_CQ dibuat menggunakan fungsi RIOCreateCompletionQueue . Pada waktu pembuatan, aplikasi harus menentukan ukuran antrean, yang menentukan berapa banyak entri penyelesaian yang dapat ditahannya. Ketika aplikasi memanggil fungsi RIOCreateRequestQueue untuk mendapatkan handel RIO_RQ , aplikasi harus menentukan handel RIO_CQ untuk mengirim penyelesaian dan handel RIO_CQ untuk menerima penyelesaian. Handel ini mungkin identik ketika antrean yang sama harus digunakan untuk mengirim dan menerima penyelesaian. Fungsi RIOCreateRequestQueue juga memerlukan jumlah maksimum operasi kirim dan terima yang terutang, yang dibebankan terhadap kapasitas antrean atau antrean penyelesaian terkait. Jika antrean tidak memiliki sisa kapasitas yang memadai, panggilan RIOCreateRequestQueue akan gagal dengan WSAENOBUFS.

Perilaku pemberitahuan untuk antrean penyelesaian diatur saat RIO_CQ dibuat.

Untuk antrean penyelesaian yang menggunakan peristiwa, anggota Jenis struktur RIO_NOTIFICATION_COMPLETION diatur ke RIO_EVENT_COMPLETION. Anggota Event.EventHandle harus berisi handel untuk peristiwa yang dibuat oleh fungsi WSACreateEvent atau CreateEvent . Untuk menerima penyelesaian RIONotify , aplikasi harus menunggu pada handel peristiwa yang ditentukan menggunakan WSAWaitForMultipleEvents atau rutinitas tunggu serupa. Jika aplikasi berencana untuk mengatur ulang dan menggunakan kembali peristiwa, aplikasi dapat mengurangi overhead dengan mengatur anggota Event.NotifyReset ke nilai bukan nol. Hal ini menyebabkan peristiwa diatur ulang secara otomatis oleh fungsi RIONotify saat pemberitahuan terjadi. Ini mengurangi kebutuhan untuk memanggil fungsi WSAResetEvent untuk mengatur ulang peristiwa antara panggilan ke fungsi RIONotify .

Untuk antrean penyelesaian yang menggunakan port penyelesaian I/O, anggota Jenis struktur RIO_NOTIFICATION_COMPLETION diatur ke RIO_IOCP_COMPLETION. Anggota Iocp.IocpHandle harus berisi handel untuk port penyelesaian I/O yang dibuat oleh fungsi CreateIoCompletionPort . Untuk menerima penyelesaian RIONotify , aplikasi harus memanggil fungsi GetQueuedCompletionStatus atau GetQueuedCompletionStatusEx . Aplikasi harus menyediakan objek TUMPANG TINDIH khusus untuk antrean penyelesaian, dan juga dapat menggunakan anggota Iocp.CompletionKey untuk membedakan permintaan RIONotify pada antrean penyelesaian dari penyelesaian I/O lainnya termasuk penyelesaian RIONotify untuk antrean penyelesaian lainnya.

Catatan

Untuk tujuan efisiensi, akses ke antrean penyelesaian (RIO_CQ structs) dan antrean permintaan (RIO_RQ structs) tidak dilindungi oleh primitif sinkronisasi. Jika Anda perlu mengakses penyelesaian atau meminta antrean dari beberapa utas, akses harus dikoordinasikan oleh bagian penting, kunci tulis pembaca ramping atau mekanisme serupa. Penguncian ini tidak diperlukan untuk akses oleh satu utas. Utas yang berbeda dapat mengakses antrean permintaan/penyelesaian terpisah tanpa kunci. Kebutuhan akan sinkronisasi hanya terjadi ketika beberapa utas mencoba mengakses antrean yang sama. Sinkronisasi juga diperlukan jika beberapa masalah utas mengirim dan menerima pada soket yang sama karena operasi kirim dan terima menggunakan antrean permintaan soket.

 

Jika beberapa utas mencoba mengakses RIO_CQ yang sama menggunakan RIODequeueCompletion, akses harus dikoordinasikan oleh bagian penting, kunci penulis pembaca ramping, atau mekanisme pengecualian timbal balik serupa. Jika antrean penyelesaian tidak dibagikan, pengecualian bersama tidak diperlukan.

Ketika antrean penyelesaian tidak lagi diperlukan, aplikasi dapat menutupnya menggunakan fungsi RIOCloseCompletionQueue .

Typedef RIO_CQ didefinisikan dalam file header Mswsockdef.h yang secara otomatis disertakan dalam file header Mswsock.h . File header Mswsockdef.h tidak boleh digunakan secara langsung.

Keamanan Thread

Jika beberapa utas mencoba mengakses RIO_CQ yang sama menggunakan RIODequeueCompletion, akses harus dikoordinasikan oleh bagian penting, kunci penulis pembaca ramping, atau mekanisme pengecualian timbal balik serupa. Jika antrean penyelesaian tidak dibagikan, pengecualian bersama tidak diperlukan.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows 8 [khusus aplikasi desktop]
Server minimum yang didukung
Windows Server 2012 [hanya aplikasi desktop]
Header
Mswsockdef.h (termasuk Mswsock.h)

Lihat juga

CreateIoCompletionPort

CreateEvent

GetQueuedCompletionStatus

GetQueuedCompletionStatusEx

TUMPANG TINDIH

RIO_NOTIFICATION_COMPLETION

RIO_NOTIFICATION_COMPLETION_TYPE

RIO_RQ

RIOCloseCompletionQueue

RIOCreateCompletionQueue

RIOCreateRequestQueue

RIODequeueCompletion

RIONotify

WSACreateEvent

WSAResetEvent

WSAWaitForMultipleEvents