多线程中使用COM组件时的初始化问题
来源:互联网 发布:电脑淘宝店招尺寸 编辑:程序博客网 时间:2024/05/17 19:18
CoInitialize、CoInitializeEx都是windows的API,主要是告诉windows以什么方式为程序创建COM对象,原因是程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。
有哪些方式呢?单线程和多线程。
CoInitialize指明以单线程方式创建。
CoInitializeEx可以指定COINIT_MULTITHREADED以多线程方式创建。
创建单线程方式的COM服务器时不用考虑串行化问题,多线程COM服务器就要考虑。
在使用中,使用CoInitialize创建可使对象直接与线程连接,得到最高的性能。创建多线程对象可以直接接收所有线程的调用,不必像单线程那样需要消息排队,但却需要COM创建线程间汇集代理,这样访问效率不高。
有哪些方式呢?单线程和多线程。
CoInitialize指明以单线程方式创建。
CoInitializeEx可以指定COINIT_MULTITHREADED以多线程方式创建。
创建单线程方式的COM服务器时不用考虑串行化问题,多线程COM服务器就要考虑。
在使用中,使用CoInitialize创建可使对象直接与线程连接,得到最高的性能。创建多线程对象可以直接接收所有线程的调用,不必像单线程那样需要消息排队,但却需要COM创建线程间汇集代理,这样访问效率不高。
如果一个进程内有多个线程,只有某个线程需要调用COM库,那么这个线程就需要调用Coinitialze进行初始化。CoInitialize告诉COM将当前的线程加入到某一个线程套间。
关于线程套间的详细内容可以查找COM的相关资料。
跨不同的线程套间有可能需要用存根和代理进行调用,而不能进行直接调用。COM库根据线程套间的兼容性来判断是否可以直接调用,还是需要通过存根和代理进行调用。因此,每个线程如果使用COM库,都需要预先声明加入某一个线程套间,这样COM库才知道如何才能决定是直接调用还是通过列集和散集调用。
CoInitialize每个使用的线程都要调用一次,而如果用CoInitializeEx的第二个参数指明COINIT_MULTITHREADED,那就不需要了。
1 0
- 多线程中使用COM组件时的初始化问题
- COM组件的初始化
- 多线程共享COM组件的问题
- COM组件初始化时的错误
- 多线程中对COM的初始化CoInitialize应该注意的问题
- vc中编写com组件供Asp使用时的注意问题
- COM 初始化的问题
- 多线程中使用Com
- QT在子线程中使用QAxWidget需要初始化COM的问题
- COM组件的使用
- com组件的使用
- COM组件中字符串问题
- com组件初始化的几个方法
- 多线程调用COM组件,使用CoInitializeEx()
- vc6中使用com组件
- 初始化COM时候的问题
- 初始化COM组件
- com组件初始化
- 第一次接触C++
- df df df dsf sdfa d fd f
- 并归排序非递归实现
- xcode快捷键
- linux svn命令
- 多线程中使用COM组件时的初始化问题
- iOS Block的语法
- POJ 2155 Matrix 二维树状数组
- SQL优化----dbms_sqltune详解
- cookie的技术实现
- Remove Duplicates from Sorted Array
- setContentView和inflate区别
- Berkeley套接字
- 用viso画C++类图