CoInitialize和CoInitializeEx


1.CoInitialize和CoInitializeEx的功能

CoInitialize是在當前線程初始化Com組件的函數,並且初始化為STA模式(單線程模式),一般新的程序建議使用CoInitializeEx來替代。CoInitializeEx初始化當前線程Com組件並提供更多的設置選項,如並發模式等。

2.關於並發模型的說明(concurrency model)

並發模型類型

下面兩種不能同時設置

COINIT_APARTMENTTHREADED

這個模式允許多線程調用,但是多線程所有的調用請求實際是被序列化,執行還是在創建這個線程對象的那個線程執行

COINIT_MULTITHREADED

這個模式允許在任何線程調用對象的方法(在這個線程創建的對象)。這不是序列化的,許多調用可以在不同的線程調用對象的方法。這種模式提供了一種高效的性能可以很好的利用多處理器跨線程、進程、機器調用,這是因為調用的這個方法沒有被序列化,而是被同時調用的。所以這種使用時作者需要自己使用線程同步的方法。這種模式一般用來無界面的調用。

 

下面兩種一般不用

COINIT_DISABLE_OLE1DDE禁用DDE對OLE1的支持COINIT_SPEED_OVER_MEMORY增加內存使用來使性能上升

3.CoInitialize多次調用和CoInitializeEx多次調用的問題

在同一個線程內多次調用CoInitializeEx是允許的,但沒有任何意義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM