Sinkronisasi Panggilan

Aplikasi COM harus dapat menangani input pengguna dengan benar saat memproses satu atau beberapa panggilan dari COM atau sistem operasi. COM menyediakan sinkronisasi panggilan hanya untuk apartemen berulir tunggal. Apartemen multithreaded (berisi utas utas bebas) tidak menerima panggilan saat melakukan panggilan (pada utas yang sama). Apartemen multithread tidak dapat melakukan panggilan input yang disinkronkan. Panggilan asinkron dikonversi ke panggilan sinkron di apartemen multithreaded. Filter pesan tidak dipanggil untuk utas apa pun di apartemen multithreaded. Untuk informasi selengkapnya tentang masalah utas, lihat Proses, Utas, dan Apartemen.

Panggilan COM antar proses termasuk dalam tiga kategori, sebagai berikut:

Panggilan sinkron

Sebagian besar komunikasi yang terjadi dalam COM sinkron. Saat melakukan panggilan sinkron, pemanggil menunggu balasan sebelum melanjutkan dan dapat menerima pesan masuk saat menunggu. COM memasukkan perulangan modal untuk menunggu balasan, menerima, dan mengirim pesan lain dengan cara yang terkontrol.

Pemberitahuan asinkron

Saat mengirim pemberitahuan asinkron, pemanggil tidak menunggu balasan. COM menggunakan postMessage atau peristiwa tingkat tinggi untuk mengirim pemberitahuan asinkron, tergantung pada platform. COM mendefinisikan lima metode asinkron IAdviseSink:

Catatan

Saat COM memproses panggilan asinkron, panggilan sinkron tidak dapat dilakukan. Misalnya, implementasi aplikasi kontainer OnDataChange tidak dapat berisi panggilan ke IPersistStorage::Save. Panggilan ini adalah satu-satunya panggilan asinkron yang didukung oleh COM. Tidak ada cara untuk membuat antarmuka kustom yang asinkron saat ini.

 

Panggilan yang disinkronkan input

Saat melakukan panggilan yang disinkronkan input, objek yang disebut harus menyelesaikan panggilan sebelum menghasilkan kontrol. Ini membantu memastikan bahwa manajemen fokus berfungsi dengan benar dan data yang dimasukkan oleh pengguna diproses dengan tepat. Panggilan ini dilakukan oleh COM melalui fungsi SendMessage , tanpa memasukkan perulangan modal. Saat memproses panggilan yang disinkronkan input, objek yang disebut tidak boleh memanggil fungsi atau metode apa pun (termasuk metode sinkron) yang mungkin menghasilkan kontrol. Metode berikut disinkronkan input

Untuk meminimalkan masalah yang dapat muncul dari pemrosesan pesan asinkron, sebagian besar panggilan metode COM sinkron. Dengan komunikasi sinkron, tidak perlu kode khusus untuk mengirim dan menangani pesan masuk. Ketika aplikasi melakukan panggilan metode sinkron, COM memasuki perulangan tunggu modal yang menangani balasan yang diperlukan dan mengirimkan pesan masuk ke aplikasi yang mampu memprosesnya.

COM mengelola panggilan metode dengan menetapkan pengidentifikasi yang disebut ID utas logis. Yang baru ditetapkan saat pengguna memilih perintah menu atau saat aplikasi memulai operasi COM baru. Panggilan berikutnya yang terkait dengan panggilan COM awal diberi ID utas logis yang sama dengan panggilan awal.