COM 线程模型

COM线程分为两种:自由线程和套间线程 

自由线程其实对应的就是win32中的工作线程,工作线程用于后台处理,没有相关联的窗口,也没有消息循环。被自由线程创建的组件不属于任何线程,任意线程均可以调用它,此时组件开发者应保证对组件访问的同步。 

要了解套间线程,首先要明白“套间”的含义。“套间”来自一个比喻,进程在其中被设想成一个完全离散的实体,就好像一个“大厦”被分成一系列相关而又不同的称为“套间”的“区域”一样。它是一个“逻辑容器”,在对象间和线程间(某些情况下)创建关联。套间实际上是一个由用户界面风格的线程和一个消息循环构成的概念性实体。套间线程就是前面提到的这个具有用户界面风格的线程。在套间中组件不需要考虑线程的同步问题,因为套间线程将拥有它所创建的组件,这些组件也只能由相应的套间线程调用,COM将调用组件的请求放到套间的消息队列中,消息循环将取出此调用请求并在套间线程上执行,这样就保证了所有对组件的调用均被同步,从而组件无需是线程安全的。

套间线程与自由线程的调用情况讨论:

1、同一线程中的调用:此时调用将是同步的,不需要做任何调整工作。 

2、套间线程间的调用:COM将对调用进行同步,对接口进行调整(Marshal)。 

3、自由线程间的调用:COM将不对调用进行同步,由于不同线程中的客户会同时对组件进行访问,因此组件需要同步对它的访问。

4、自由线程对套间线程的调用:COM将对调用进行同步,对接口进行调整,组件将在套间线程中被调用。

5、套间线程对自由线程的调用:COM将不对调用进行同步,但是会对接口进行调整,同步工作将由组件完成。 

COM线程模型分为三种:单线程套间模型(STA)、多线程套间模型(MTA)、混合模型 

STA规定只有一个套间中只能拥有一个线程,一个线程通过调用CoInitialize()或者CoInitializeEx(0,COINT_APARTMENTTHREADED)声明自己为STA,一个进程中可以同时存在多个STA。

MTA规定一个套间可以拥有多个线程,这些线程都是自由线程,根据上述自由线程的介绍,我们知道线程同步必须在组建内实现。一个进程中只能拥有一个MTA,通过调用CoInitialize(0,COINT_MULTITHREADED)声明自己为一个MTA中的自由线程 

混合模型指一个进程中同时存在STA和MTA

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值