Fungsi MsgWaitForMultipleObjectsEx (winuser.h)
Menunggu hingga satu atau semua objek yang ditentukan berada dalam status sinyal, panggilan prosedur rutin atau asinkron (APC) penyelesaian I/O diantrekan ke utas, atau interval waktu habis berlalu. Array objek dapat menyertakan objek peristiwa input, yang Anda tentukan menggunakan parameter dwWakeMask .
Sintaks
DWORD MsgWaitForMultipleObjectsEx(
[in] DWORD nCount,
[in] const HANDLE *pHandles,
[in] DWORD dwMilliseconds,
[in] DWORD dwWakeMask,
[in] DWORD dwFlags
);
Parameter
[in] nCount
Jumlah handel objek dalam array yang ditujukan oleh pHandles. Jumlah maksimum handel objek MAXIMUM_WAIT_OBJECTS dikurangi satu. Jika parameter ini memiliki nilai nol, maka fungsi hanya menunggu peristiwa input.
[in] pHandles
Array handel objek. Untuk daftar jenis objek yang handelnya bisa Anda tentukan, lihat bagian Keterangan nanti dalam topik ini. Array dapat berisi handel ke beberapa jenis objek. Ini mungkin tidak berisi beberapa salinan dari handel yang sama.
Jika salah satu handel ini ditutup saat penantian masih tertunda, perilaku fungsi tidak terdefinisi.
Handel harus memiliki hak akses SYNCHRONIZE . Untuk informasi selengkapnya, lihat Hak Akses Standar.
[in] dwMilliseconds
Interval waktu habis, dalam milidetik. Jika nilai bukan nol ditentukan, fungsi menunggu hingga objek yang ditentukan diberi sinyal, rutinitas penyelesaian I/O atau APC diantrekan, atau interval berlalu. Jika dwMilliseconds adalah nol, fungsi tidak memasukkan status tunggu jika kriteria tidak terpenuhi; selalu kembali segera. Jika dwMilliseconds adalah INFINITE, fungsi hanya akan kembali ketika objek yang ditentukan diberi sinyal atau rutinitas penyelesaian I/O atau APC diantrekan.
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.
[in] dwWakeMask
Jenis input yang handel objek peristiwa inputnya akan ditambahkan ke array handel objek. Parameter ini dapat berupa kombinasi nilai apa pun yang tercantum dalam parameter benderaGetQueueStatus.
[in] dwFlags
Jenis tunggu. Parameter ini bisa menjadi satu atau beberapa nilai berikut.
Nilai | Makna |
---|---|
|
Fungsi mengembalikan ketika salah satu objek disinyalkan. Nilai yang dikembalikan menunjukkan objek yang statusnya menyebabkan fungsi dikembalikan. |
|
Fungsi ini juga mengembalikan jika APC telah diantrekan ke utas dengan QueueUserAPC saat utas dalam status menunggu. |
|
Fungsi mengembalikan jika input ada untuk antrean, bahkan jika input telah terlihat (tetapi tidak dihapus) menggunakan panggilan ke fungsi lain, seperti PeekMessage. |
|
Fungsi mengembalikan ketika semua objek dalam array pHandles diberi sinyal dan peristiwa input telah diterima, semuanya pada saat yang sama. |
Mengembalikan nilai
Jika fungsi berhasil, nilai yang dikembalikan menunjukkan peristiwa yang menyebabkan fungsi dikembalikan. Ini bisa menjadi salah satu nilai berikut. (Perhatikan bahwa WAIT_OBJECT_0 didefinisikan sebagai 0 dan WAIT_ABANDONED_0 didefinisikan sebagai 0x00000080L.)
Mengembalikan kode/nilai | Deskripsi |
---|---|
|
Jika bendera MWMO_WAITALL digunakan, nilai yang dikembalikan dalam rentang yang ditentukan menunjukkan bahwa status semua objek yang ditentukan diberi sinyal. Jika tidak, nilai yang dikembalikan dikurangi WAIT_OBJECT_0 menunjukkan indeks array pHandles dari objek yang menyebabkan fungsi kembali. |
|
Input baru dari jenis yang ditentukan dalam parameter dwWakeMask tersedia dalam antrean input utas. Fungsi seperti PeekMessage, GetMessage, GetQueueStatus, dan waitMessage menandai pesan dalam antrean sebagai pesan lama. Oleh karena itu, setelah Anda memanggil salah satu fungsi ini, panggilan berikutnya ke MsgWaitForMultipleObjectsEx tidak akan kembali sampai input baru dari jenis yang ditentukan tiba.
Nilai ini juga dikembalikan setelah terjadinya peristiwa sistem yang memerlukan tindakan utas, seperti aktivasi latar depan. Oleh karena itu, MsgWaitForMultipleObjectsEx dapat kembali meskipun tidak ada input yang sesuai yang tersedia dan bahkan jika dwWakeMask diatur ke 0. Jika ini terjadi, panggil GetMessage atau PeekMessage untuk memproses peristiwa sistem sebelum mencoba panggilan ke MsgWaitForMultipleObjectsEx lagi. |
|
Jika bendera MWMO_WAITALL digunakan, nilai yang dikembalikan dalam rentang yang ditentukan menunjukkan bahwa status semua objek yang ditentukan diberi sinyal dan setidaknya salah satu objek adalah objek mutex yang ditinggalkan. Jika tidak, nilai yang dikembalikan dikurangi WAIT_ABANDONED_0 menunjukkan indeks array pHandles dari objek mutex yang ditinggalkan yang menyebabkan fungsi kembali. Kepemilikan objek mutex diberikan ke utas panggilan, dan mutex diatur ke nonsignaled.
Jika mutex melindungi informasi status persisten, Anda harus memeriksanya untuk konsistensi. |
|
Penantian diakhapi oleh satu atau beberapa panggilan prosedur asinkron mode pengguna (APC) yang diantrekan ke utas. |
|
Interval waktu habis berlalu, tetapi kondisi yang ditentukan oleh parameter dwFlags dan dwWakeMask tidak terpenuhi. |
|
Fungsi gagal. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError. |
Keterangan
Fungsi MsgWaitForMultipleObjectsEx menentukan apakah kondisi yang ditentukan oleh dwWakeMask dan dwFlags telah terpenuhi. Jika kondisi belum terpenuhi, utas panggilan memasuki status tunggu hingga kondisi kriteria tunggu telah terpenuhi atau interval waktu habis berlalu.
Ketika dwFlags adalah nol, fungsi ini memeriksa handel dalam array agar dimulai dengan indeks 0, sampai salah satu objek diberi sinyal. Jika beberapa objek menjadi sinyal, fungsi mengembalikan indeks handel pertama dalam array yang objeknya diberi sinyal.
MsgWaitForMultipleObjectsEx tidak mengembalikan jika ada input yang belum dibaca dari jenis yang ditentukan dalam antrean pesan setelah utas memanggil fungsi untuk memeriksa antrean, kecuali Anda menggunakan bendera MWMO_INPUTAVAILABLE . Ini karena fungsi seperti PeekMessage, GetMessage, GetQueueStatus, dan WaitMessage memeriksa antrean lalu mengubah informasi status untuk antrean sehingga input tidak lagi dianggap baru. Panggilan berikutnya ke MsgWaitForMultipleObjectsEx tidak akan kembali sampai input baru dari jenis yang ditentukan tiba, kecuali Anda menggunakan bendera MWMO_INPUTAVAILABLE . Jika bendera ini tidak digunakan, input belum dibaca yang ada (diterima sebelum terakhir kali utas memeriksa antrean) diabaikan.
Fungsi memodifikasi status beberapa jenis objek sinkronisasi. Modifikasi hanya terjadi untuk objek atau objek yang status sinyalnya menyebabkan fungsi kembali. Misalnya, sistem mengurangi jumlah objek semaphore satu per satu. Untuk informasi selengkapnya, lihat dokumentasi untuk objek sinkronisasi individual.
Fungsi MsgWaitForMultipleObjectsEx dapat menentukan handel dari salah satu jenis objek berikut dalam array pHandles :
- Mengubah pemberitahuan
- Input konsol
- Kejadian
- Pemberitahuan sumber daya memori
- Mutex
- Proses
- Semaphore
- Rangkaian
- Timer yang dapat ditunda
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | winuser.h (sertakan Windows.h) |
Pustaka | User32.lib |
DLL | User32.dll |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk