Metode IMessageFilter::MessagePending (objidl.h)
Menunjukkan bahwa pesan telah tiba saat COM sedang menunggu untuk merespons panggilan jarak jauh.
Menangani input sambil menunggu panggilan keluar selesai dapat menimbulkan komplikasi. Aplikasi harus menentukan apakah akan memproses pesan tanpa mengganggu panggilan, untuk terus menunggu, atau membatalkan operasi.
Sintaks
DWORD MessagePending(
[in] HTASK htaskCallee,
[in] DWORD dwTickCount,
[in] DWORD dwPendingType
);
Parameter
[in] htaskCallee
Id utas dari aplikasi yang disebut.
[in] dwTickCount
Jumlah tanda centang sejak panggilan dilakukan. Ini dihitung dari fungsi GetTickCount .
[in] dwPendingType
Jenis panggilan yang dilakukan di mana pesan atau peristiwa diterima. Nilai yang mungkin berasal dari enumerasi PENDINGTYPE, di mana PENDINGTYPE_TOPLEVEL berarti panggilan keluar tidak ditumpuk dalam panggilan dari aplikasi lain dan PENDINTGYPE_NESTED berarti panggilan keluar ditumpuk dalam panggilan dari aplikasi lain.
Nilai kembali
Metode ini dapat mengembalikan nilai berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Batalkan panggilan keluar. Ini harus dikembalikan hanya dalam kondisi ekstrem. Membatalkan panggilan yang belum membalas atau ditolak dapat membuat transaksi yatim piatu dan kehilangan sumber daya. COM gagal dalam panggilan asli dan mengembalikan RPC_E_CALL_CANCELLED. |
|
Tidak digunakan. |
|
Pesan keyboard dan mouse tidak lagi dikirim. Namun ada beberapa kasus di mana pesan mouse dan keyboard dapat menyebabkan sistem mengalami kebuntuan, dan dalam kasus ini, pesan mouse dan keyboard dibuang. WM_PAINT pesan dikirim. Pesan pengalihan tugas dan aktivasi ditangani seperti sebelumnya. |
Keterangan
COM memanggil MessagePending setelah aplikasi melakukan panggilan metode COM dan pesan Windows terjadi sebelum panggilan kembali. Pesan Windows dikirim, misalnya, saat pengguna memilih perintah menu atau mengklik dua kali objek. Sebelum COM melakukan panggilan MessagePending , ia menghitung waktu yang berlalu sejak panggilan metode COM asli dilakukan. COM memberikan waktu yang berlalu dalam parameter dwTickCount . Sementara itu, COM tidak menghapus pesan dari antrean.
Pesan Windows yang muncul dalam antrean pemanggil harus tetap dalam antrean sampai waktu yang cukup berlalu untuk memastikan bahwa pesan mungkin bukan hasil mengetik di depan, tetapi sebagai gantinya merupakan upaya untuk mendapatkan perhatian. Atur penundaan dengan parameter dwTickCount —penundaan dua detik atau tiga detik disarankan. Jika jumlah waktu berlalu dan panggilan belum selesai, pemanggil harus menghapus pesan dari antrean dan kotak dialog sibuk OLE UI harus ditampilkan menawarkan pengguna pilihan mencoba kembali panggilan (lanjutkan menunggu) atau beralih ke tugas yang ditentukan. Ini memastikan perilaku berikut:
- Jika panggilan selesai dalam waktu yang wajar, jenis di depan akan diperlakukan dengan benar.
- Jika penerima panggilan tidak merespons, ketik depan tidak disalahartikan dan pengguna dapat bertindak untuk menyelesaikan masalah. Misalnya, server OLE 1 dapat mengantre permintaan tanpa merespons saat berada dalam kotak dialog modal.
Ketika tidak ada respons terhadap panggilan COM asli, aplikasi dapat membatalkan panggilan dan memulihkan objek COM ke status konsisten dengan memanggil IStorage::Kembalikan pada penyimpanannya. Objek dapat dilepaskan ketika kontainer dapat dimatikan. Namun, membatalkan panggilan dapat membuat operasi tanpa sumber daya dan kebocoran sumber daya. Pembatalan hanya boleh digunakan sebagai upaya terakhir. Sangat disarankan agar aplikasi tidak mengizinkan panggilan tersebut dibatalkan.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Target Platform | Windows |
Header | objidl.h |
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