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是允许的,但没有任何意义。

CoInitialize和CoInitializeEx的更多相关文章

  1. CoInitialize()、CoInitializeEx()和AfxOleInit()区别联系

    CoInitialize()和AfxOleInit() 都是初始化COM库,不同之处在与: OLE是建立在COM之上的技术,层次比COM要高.AfxOleInit()调用的是OleInitialize ...

  2. DLL中不能调用CoInitialize和CoInitializeEx

    在项目中为了用API访问Wmi Object来实现命令wmic的功能,所以得使用COM库,使用COM库之前得初始化一些东西. m_hr = CoInitializeEx(, COINIT_APARTM ...

  3. CoInitialize浅析一

    大家都知道程序中若要使用COM组件则必须要先调用CoInitialize,该函数主要是用来初始化COM运行环境.但这个函数的作用域是以线程为单位还是以进程为单位呢?也许大家已经通过测试程序摸索出答案, ...

  4. AfxOleInit()和::CoInitialize(NULL)区别

    From: http://blog.csdn.net/zhoubl668/archive/2009/04/30/4139933.aspx OLE是建立在COM之上的技术,层次比COM要高.AfxOle ...

  5. 多线程调用COM组件的体会(CoInitialize)(转)

    原文转自 https://www.cnblogs.com/manors/archive/2010/05/17/COM_Initialize_STA_MTA.html 与设备打交道时,我们经常用到COM ...

  6. 多线程调用COM组件的体会(CoInitialize)

    调用任何COM组件之前,你必须首先初始化COM套件环境,即调用CoInitialize或CoInitializeEx.COM套件环境在线程的生存周期内有效,线程退出前需要调用CoUninitializ ...

  7. ADO

    目 录 第1章 基础    1 1.1 引入ADO库文件    1 1.1.1 版本    1 1.2 初始化OLE/COM库环境    2 1.3 comdef.h    2 1.3.1 字符串编码 ...

  8. Delphi COM编程学习笔记(1)

    释放接口对象,既不是调用MyObj.Free,也不是MyObj.Release;破坏对象的正确方法是将它们设置为nil:MyInterface := nil; 一个接口不能离开实现它的对象而独立存活. ...

  9. vc中关于 directx的配置,和dxsdk_extras(directshow)

      2009-11-10 0:28 此文章:自己编写 转载于<汤姆&杰瑞> DirectShow 1 -- 下载与VC配置 1 DirectX SDK9 Directshow sd ...

随机推荐

  1. eclipse在Windows7 64 位下出现Unhandled event loop exception No more handles

    1..如果不影响工程正常发布运行,就不要管他了2.工作空间有毛病.把workspace的.metadata删了3.把eclipse重装下.一般第二步能解决大多数问题.

  2. With Visual Studio, Open Same File In Two Windows, Updates Reflected in Both

    I’ve always been frustrated in Visual Studio (all versions I can remember including latest vs2012) w ...

  3. @JVM垃圾回收机制的一些概念

    数据类型 Java虚拟机中,数据类型可以分为两类:基本数据类型和引用数据类型 .基本类型的变量保存的值就是数值本身:而引用类型的变量保存引用值."引用值"代表了某个对象的引用,而不 ...

  4. Informatica 常用组件Lookup缓存之四 使用不高速缓存的查找或静态高速缓存

    默认情况下,在为高速缓存配置查找转换时,PowerCenter 将创建静态查找高速缓存.PowerCenter 将在处理第一个查找请求时创建高速缓存.它将根据查找条件为传递给转换的每行查询高速缓存.P ...

  5. Android中远程Service浅析

    上一篇文章中简单的写了一下关于Android中Service的两种启动方式,不过都是本地的服务,今天就简单的写下关于Android中远程Service的使用,学习之前先了解两个概念,AIDL( And ...

  6. 理解闭包的微观世界和JS垃圾回收机制

    function a() { ; function b() { alert(++i); } return b; } var c = a(); c(); 一.闭包的微观世界 如果要更加深入的了解闭包以及 ...

  7. layer和3D仿射变换

    1.视图的显示基于图层,通过控制图层同样能控制显示效果,获取当前的视图的layer,并为其增加圆角边框. //设置layer边框的宽度为2 view.layer.borderWidth=; //如果需 ...

  8. Unity3D游戏开发最佳实践20技巧(三)

    [文本] 38.假设你有非常多的剧情文本.那么把他们放到一个文件中面. 不要把他们放到Inspector的字段中去编辑. 这些须要做到不打开Unity,也不用保存Scene就能够方便的改动. 39.假 ...

  9. Oracle中的日期处理方法

    日期处理方法                                                        当前日期和时间 Select sysdate from dual; 本月最后 ...

  10. Kafka 配置说明

    参考地址:http://my.oschina.net/infiniteSpace/blog/312890?p=1 server.properties中所有配置参数说明(解释) broker.id =0 ...