com之套间(Apartment)

原创 2004年02月09日 00:07:00

com之套间<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

参考资料:《Essential COM》、《MSDN

 

什么是套间

    套间(Apartment),形象点,他就是一个用来装com对象的容器,一个套间内可以有多个Com对象,但是对于每个com对象在某一时刻只能够属于某一个套间。

 

套间用途和存在意义

    假设你使用过Com。我们在一个线程A里创建了一个COM对象,那么在线程A里我们就可以访问该COM对象的方法、属性。如果此时我们有另外一个线程B他想要访问线程A里创建的Com对象的方法和属性,怎么办?按照习惯我们就不得不重新改变我们的线程策略,如把Com对象作为全局;或则是定义一个Com对象的全局指针,在线程A创建以后给她付值,再在创建线程B时把这个指针传过去,而且你还要进行一些同步操作,以确保在线程B对线程A创建的COM对象调用期间,该对象有效(没有删掉)。   看到了吗,我们只是想让B访问ACom对象而已,但是要做的工作却是如此让人烦躁。  为了让我们能够很方便的使用他人提供的对象,而无需重新改动我们的线程策略。Com提供了套间(Apartment)这个概念,它把对象的并发行限制作为另一个实现细节,解除了客户与Com对象的并发性和重入限制之间的关联,建立起了Com对象与进程和线程之间相互关系的模型,从而使我们能够透明的使用一个对象,而不用关心她是否感知线程。

      

套间既不是进程,也不是线程。她和进程和线程之间的关联尊崇以下几个原则

      1. 每个使用Com的进程都有一个或多个套间;

       2. 一个套间只能包含在某一个进程中;

       3. 每个套间可以拥有一个(STA)或多个(MTA)线程;

       4. 一个线程只在某一个套间中执行;

       5. 每个套间可以包含多个对象。

com规定,只有运行在对象的套间中的线程才能够访问该对象。

     

套间详解

     目前Com规范中定义了两种类型的套间:多线程套间(MTAMultithreaded Apartment)和单线程套间(STA, Singlethreaded apartment).

从套间的分类看,一个进程的存在以下几种可能类型:

       a. 仅仅包含一个STAa single-threaded process);

       b. 包含两个或多个STAan apartment model process

       c. 包含一个MTAa free-threaded process);

       d. 包含一个MTA,不定数目的STA mixed model process

 

STA套间

原则:

       a. 一个进程可以包含多个STA

       b. 每个STA中有且只有一个线程执行;

       以上原则决定,驻留在STA中的对象永远也不能被多个线程并发访问,而且只有一个特定的线程可以执行对象的方法。

 

MTA套间

原则:

       a. 一个进程只能包含一个MTA

       b. 每个MTA中可以有多个线程执行;

       以上原则决定,驻留在MTA中对象能够被多个线程并发访问,这在某些情况下可以提供程序的效率(如文章开头所举例子),但是作为实现者,你必须处理好线程之间的同步关系。

 

<待续……..>

COM套间和线程模型

转自http://blog.itpub.net/23410886/viewspace-1032239/ 在看组件的注册表时,对TreadingModel很不理解,所以网上查阅总结了下。大部分...
  • xbgprogrammer
  • xbgprogrammer
  • 2016年08月08日 15:10
  • 393

理解 COM 套间

原文:http://www.vckbase.com/index.php/wv/1315.html 简序 大学毕业前的最后一学期,在一家公司实习,当时的工作需要用到一些操作系统提...
  • maomao171314
  • maomao171314
  • 2016年05月05日 11:06
  • 592

COM单线程套间详解

作者: Ocean 发表时间: 2010年7月25日 本文链接: http://www.soft-bin.com/html/2010/07/25/com%e5%8d%95%e7%ba%bf%e7%...
  • patdz
  • patdz
  • 2013年01月07日 19:34
  • 2070

COM组件的初始化

任何一个使用COM组件的windows程序在初始化COM库的时候都要调用CoInitializeEx函数,每一个使用COM接口的线程必须单独调用这个函数。...
  • youjiaqu
  • youjiaqu
  • 2016年02月15日 10:36
  • 557

理解COM套间(第一部分)

原帖地址:http://blog.csdn.net/qq276592716/article/details/7938630 编写拙作《关于COM组件线程模型的实验》的过程中,发现自己无法合理解释特定...
  • Stone_Sky
  • Stone_Sky
  • 2014年02月21日 10:35
  • 602

COM线程模型详解

http://blog.chinaunix.net/uid-24862988-id-3799415.html         线程模型是一种数学模型,专门针对多线程编程而...
  • weiweixiaopasta
  • weiweixiaopasta
  • 2016年04月07日 10:44
  • 422

理解COM套间(第二部分)

http://blog.csdn.net/qq276592716/article/details/7938642   本文的前一部分阐述了为什么和怎样使用COM套间。读过之后,你会知道,调用CoI...
  • Stone_Sky
  • Stone_Sky
  • 2014年02月21日 10:36
  • 482

COM和套间(Apartments) 1 - 基本知识

Overview COM技术过时了吗?这句话也对也不对。从技术上讲,确实COM的使用率在下降,但是从思想上来说,COM的面向接口的思想正在被Java和.NET发扬光大。那我们还需要和COM打交道...
  • Andeewu
  • Andeewu
  • 2013年03月25日 16:28
  • 602

1232. Electrical Outlets 用电 这题目这英语…

1232. Electrical Outlets Constraints Time Limit: 1 secs, Memory Limit: 32 MB Descriptio...
  • u012230199
  • u012230199
  • 2014年01月23日 18:06
  • 684

COM线程模型 - MTA接口 (STA套间调用MTA对象)

 http://support.microsoft.com/kb/150777
  • zj510
  • zj510
  • 2014年09月04日 15:42
  • 1643
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:com之套间(Apartment)
举报原因:
原因补充:

(最多只允许输入30个字)