Enumerasi COINIT (objbase.h)

Menentukan model konkurensi yang digunakan untuk panggilan masuk ke objek yang dibuat oleh utas ini. Model konkurensi ini dapat berupa rangkaian apartemen atau multithreaded.

Sintaks

typedef enum tagCOINIT {
  COINIT_APARTMENTTHREADED = 0x2,
  COINIT_MULTITHREADED,
  COINIT_DISABLE_OLE1DDE = 0x4,
  COINIT_SPEED_OVER_MEMORY = 0x8
} COINIT;

Konstanta

 
COINIT_APARTMENTTHREADED
Nilai: 0x2
Menginisialisasi utas untuk konkurensi objek berulir apartemen (lihat Keterangan).
COINIT_MULTITHREADED
Menginisialisasi utas untuk konkurensi objek multithreaded (lihat Keterangan).
COINIT_DISABLE_OLE1DDE
Nilai: 0x4
Menonaktifkan DDE untuk dukungan OLE1.
COINIT_SPEED_OVER_MEMORY
Nilai: 0x8
Tingkatkan penggunaan memori dalam upaya untuk meningkatkan performa.

Keterangan

Ketika utas diinisialisasi melalui panggilan ke CoInitializeEx, Anda memilih apakah akan menginisialisasinya sebagai rangkaian apartemen atau multithreaded dengan menunjuk salah satu anggota COINIT sebagai parameter kedua. Ini menunjuk bagaimana panggilan masuk ke objek apa pun yang dibuat oleh utas tersebut ditangani, yaitu konkurensi objek.

Rangkaian apartemen, sambil memungkinkan beberapa utas eksekusi, menserialisasikan semua panggilan masuk dengan mengharuskan panggilan ke metode objek yang dibuat oleh utas ini selalu berjalan pada utas yang sama, yaitu apartemen/utas yang membuatnya. Selain itu, panggilan hanya dapat tiba di batas antrean pesan. Karena serialisasi ini, biasanya tidak perlu menulis kontrol konkurensi ke dalam kode untuk objek, selain untuk menghindari panggilan ke PeekMessage dan SendMessage selama pemrosesan yang tidak boleh terganggu oleh pemanggilan metode lain atau panggilan ke objek lain di apartemen/utas yang sama.

Multi-threading (juga disebut free-threading) memungkinkan panggilan ke metode objek yang dibuat oleh utas ini untuk dijalankan pada utas apa pun. Tidak ada serialisasi panggilan, yaitu banyak panggilan yang mungkin terjadi pada metode yang sama atau ke objek yang sama atau secara bersamaan. Konkurensi objek multi-utas menawarkan performa tertinggi dan mengambil keuntungan terbaik dari perangkat keras multiprosesor untuk lintas alur, lintas proses, dan panggilan lintas mesin, karena panggilan ke objek tidak diserialisasikan dengan cara apa pun. Namun, ini berarti bahwa kode untuk objek harus memberlakukan model konkurensinya sendiri, biasanya melalui penggunaan primitif sinkronisasi, seperti bagian penting, semaphore, atau mutex. Selain itu, karena objek tidak mengontrol masa pakai utas yang mengaksesnya, tidak ada status khusus utas yang dapat disimpan dalam objek (di Thread Local Storage).

Catatan Apartemen multi-utas ditujukan untuk digunakan oleh utas non-GUI. Utas di apartemen multi-utas tidak boleh melakukan tindakan UI. Ini karena utas UI memerlukan pompa pesan, dan COM tidak memompa pesan untuk utas di apartemen multi-utas.
 

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Header objbase.h

Lihat juga

CoInitializeEx

IInitializeSpy::P ostInitialize

IInitializeSpy::P reInitialize

Proses, Utas, dan Apartemen