com之套间(Apartment)

COM的Apartment概念 首先,COM的Apartment概念是为了让COM的开发和使用都容易才引入Apartment概念的。但是关于Apartment概念详细阐述的比较好的资料在国内可能比较少,所以有很多人对其理解上存在一些疑问。这很正常,我当初为理解它也花了2周时间,参考了不少资料。 其次,marshal的问题。marshal主要是COM用来在进程间以及计算机间进行COM调用时用的,即Proxy/stub模型。但是在进 阅读详情

com之套间

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

 

什么是套间

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

 

套间用途和存在意义

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

      

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

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

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

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

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

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

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

     

套间详解

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

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

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

       b. 包含两个或多个STA(an apartment model process);

       c. 包含一个MTA(a free-threaded process);

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

 

STA套间

原则:

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

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

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

 

MTA套间

原则:

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

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

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

 

<待续……..>

com 套间代码。 对COM套间的理解,用代码诠释,对COM的学习有一定价值。 立即下载

相关推荐

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装 1. BNC软件 1.1 软件介绍 The BKG Ntrip Client (BNC) is an Open Source multi-stream client program designed for a variety of real-time GNSS applications. It was primarily designed for receiving data streams from any Ntrip

小马甲的新马甲 7807

关于COM及套间(Apartment)知识

什么是COM组件? COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。 COM组件是遵循COM规范编写的 COM组件是一些小的二进制可执行文件 COM组件可以给应用程序、操作系统以及其他组件提供服务 自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序 COM组件可以动态的插入或卸出应用 COM组件必须是动态链接的

3159

基于ASP.NET+SQLServer的美妆网站的设计与实现

通过本次ASP.NET MVC美妆商城项目的开发,我们实现了一个功能完善、性能稳定的在线购物平台。该项目不仅提升了用户的购物体验,也为商家提供了一个高效的商品管理和销售渠道。未来,我们将持续优化系统功能,提升用户体验,以适应不断变化的市场需求。

毕业设计大牛哥 1500

COM和套间(Apartments)

COM技术过时了吗?这句话也对也不对。从技术上讲,确实COM的使用率在下降,但是从思想上来说,COM的面向接口的思想正在被Java和.NET发扬光大。那我们还需要和COM打交道吗?这取决于你工作的领域。虽然现在微软的平台在慢慢向着.NET迁移,不过,在维护原有非托管代码,编写和Windows系统组件打交道的程序,以及使用CLR调用非托管代码的时候,COM或多或少都是不可避免的。与COM打交道就没法

kingofbird的专栏 1249

告别调参烦恼:用Simulink手把手实现自适应模糊PID温度控制(附模型下载)

本文详细介绍了如何使用Simulink实现自适应模糊PID温度控制,解决传统PID调参难题。通过模糊推理引擎动态调整PID参数,系统能自动适应不同工况,显著提升控制精度和响应速度。文章包含完整的建模步骤、参数优化技巧和工业应用扩展,并附赠可下载模型,帮助工程师快速掌握这一智能控制技术。

weixin_30872499的博客 153

极化码理论及算法研究4-巴氏参数、GA算法以及matlab仿真

目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 极化码编码 ...

1万+

COM组件以及套间

COM组件的特点: 1. COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。 2. COM组件是遵循COM规范编写的   COM组件是一些小的二进制可执行文件 3. COM组件可以给应用程序、操作系统以及其他组件提供服务 4. 自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序 5. COM组件可以动态的插入或卸出应用 6. COM组件必须...

SpringDou的博客 1386

ACR 磁共振安全手册 2024 更新版:全面保障 MRI 安全实践

MR 环境:MR 系统周围的三维空间,包含法拉第屏蔽体积和 9 高斯线,医疗设备在此区域可能因暴露于 MR 设备产生的电磁场而构成危险,需进行访问控制以降低风险MR 受控访问区域:MR 系统周围的局部定义区域,包含 MR 环境(包括其静磁场),访问仅限于授权人员MR 抛射物区域:围绕 MRI 系统的 IV 区区域,铁磁物体在此有成为抛射物的风险图一 磁共振环境:场地规划与区域划分。

楚山之石的博客 2602

理解 COM 套间

简序  Don Box 在《COM 本质论》中说,对接口,类对象和套间有了彻底的理解,那么使用COM,没有翻不过去的山头。如果你对C++有深入的理解,那么《COM本质论》中对接口和类对象的阐述很清晰,理解并不困难。但套间是一个比较抽象的概念,而书上对这部分只是理论的叙述,没有提供具体的例子,理解起来就更困难了。在此我把自己找到的一些例子和自己的理解总结以下,以期给初学者提供一些入门的方法。闲话

蜗牛档案室 2229

二十一、CANdelaStudio深入-SPRMIB的配置

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的肯定响应抑制位配置,欢迎各位朋友订阅、评论,可以提出宝贵意见,以持续输出更好的作品,同时会根据评论、私信不定期更新文章内容,以及专栏目录。订阅该专栏的朋友可私信小编免费答疑解惑(^U^)ノ~YO CANdelaStudio-从入门到深入目录 文章目录CANdelaStu

诊断协议那些事儿's blog 1870

uniapp - 详细手机端h5网页调用手机摄像头进行二维码识别扫描,在uniapp的H5移动端微信网页平台中,在浏览器中调用手机扫码功能详细教程,识别二维码并获取扫描结果(完整示例源码,一键复制即用

uniapp,h5,手机端网页,H5手机网页,uniapp开发h5实现扫码功能,uniapp微信h5网页扫码sdk使用教程,uniapp h5网页如何实现浏览器扫码,uniapp扫码功能怎么兼容h5_uniapph5怎么做扫码功能,uniapp的手机网页如何实现扫二维码一维码,浏览器H5实现js扫码,H5调用摄像头和扫一扫功能,亲测可用,H5调用本地摄像头实现扫一扫,uni-h5项目解决扫码功能,uniapp实现微信H5扫码,解决uniapp在H5端使用不能扫码问题,uni-app的h5扫码(二维码、条形码

✅ 精选推荐文章 1万+

COM与套间(Apartment)之我见

COM与套间之我见                                                               作者:ynb  2009.12.08 前言   这篇文章,只写给那些对COM有一定了解,并想搞清楚所谓COM多线程特性的有志青年,以求共勉。   潘爱民的《COM原理与应用》里,在描述COM的多线程特性时,有这么一句话:“虽然两个线

1万+

如何借助Gemini 3 Pro完成一篇文献精读?(劝收藏)

金句必须是原文的完整句子,并附上该句子在文中的大致位置。你是一名资深科研文献评估专家,请根据我提供的文献信息(标题、作者、期刊、时间、引用、摘要、结论、图表)依次输出:①影响力评估:按期刊、作者、时间、引用、问题重要性给出1–10分及简述;用上述方法再结合Gemini 3 Pro的辅助,原本需要3小时才能读完一篇文献,现在只需50分钟,不管是顶刊论文还是领域内冷门论文,都可以用这套方法,另外七哥设计的高阶精读提示词,需根据自己的文献内容做调整,希望这篇文章的方法能帮你高效精读文献,掌握文献的精华内容。

智能AI让学术科研更容易 1302

COM Apartment (套间)

COM  Apartment (套间) 套间的由来 最开始的COM库,支持的使用组件的唯一模式是single-thread-per-process模式。这样就避免了多线程的同步,而且组件执行的线程肯定是创建它的线程。 然而组件对象真正的执行环境很复杂。COM组件的执行环境有两种:单线程环境Single-Thread,多线程环境Multi-Thread。单线程要考虑执行线程是否是创建组件的

852

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

COM——套间

理解 COM 套间junguo下载源代码 简序   大学毕业前的最后一学期,在一家公司实习,当时的工作需要用到一些操作系统提供的组件。那时候只知道COM这个名词,并不知道到底是怎么回事,只知道上网到处找别人的源码解决自己的问题;那段日子到现在回忆起来都是灰色的,每天呆坐在电脑前,一个网站一个网站的查找自己需要的源码。但并不清楚自己到底在做什么;那时候对自己能不能成为一个程序员充满了怀疑。在实习

feijj2002_的专栏 2653

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

不能从远程创建com+对象_COM编程攻略(十二 套间Apartment)

前几编介绍了COM及ATL的一些基础设施:Froser:COM编程攻略(十一 COM设施之智能指针CComPtr)​zhuanlan.zhihu.com这一遍主要讲COM中一个最为复杂的部分:套间(Apartment)。本文着重讲它的基本概念,并且最后附上一个例子。1、什么是套间想象你住在一个很大的单身公寓(Apartment)里面,因为疫情的原因,你不能出门。你的小区有很多这样的单身公寓(STA...

weixin_39985472的博客 133

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

COM套间

COM套间

求索 618
上一篇: com之 代理(proxy)与存根(stub)
下一篇: 写在飞跃之前
shudingbo
博客等级 码龄25年 37粉丝 52原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值