你注意到COM编程中“STA 单线程套间”的重入问题了吗?

COM线程模型 - STA接口 COM里面的线程模型应该是COM里面比较困难的一部分了,我自己也是花了很多时间,而且也还不是很懂。最近 阅读详情

在COM编程中,COM线程模型的选择是避免不了的。网上已有大量介绍“COM线程模型”的文章,在这里我只想说“STA 单线程套间”并不像想象中的那么简单,在实际的开发中会出现“重入问题”。

“STA 单线程套间”,指的是一个线程只能建立一个套间,在线程中创建的COM对象只属于这个套间,其他线程对此线程中COM对象的调用都必须通过代理对象串行调用。这样,“STA 单线程套间”轻松解决了多线程之间的“同步问题”。

于是,我们将COM对象都采用“STA 单线程套间”,是不是就万事大吉了呢?当然不是。为了避免死锁,所有的COM套间类型都支持重入,当然“STA 单线程套间”也不例外。当套间中的线程通过代理调用到其他套间中的对象的时候,调用者线程在等待此调用完成的过程中,它可以继续处理其他的入方法请求。

 

例如,线程1中的对象a访问线程3中的对象c,对象c又访问线程4中的对象d。此时,线程4在处理传入的调用,线程3在等待线程4返回,线程1在等待线程3返回。由于“STA 单线程套间”支持重入,所以,此时当线程2中的对象b发起对线程3中对象c的访问时,就会立即执行。于是,线程3中的对象c就面临着“重入问题”的考验。

在一个多线程的程序中,这种“重入问题”的发生可能无处不在。如果我们忽视了这个问题的存在,那么在后续的开发中就会遇到许多莫名其妙的问题,而且极难纠错。因为,我们的逻辑是对的,只是“重入问题”的发生,会将代码的执行环境(变量或循环结构等)改变或破坏,使得程序无法再进行下去,或产生错误的结果。

想象一下,我们在每实现一个COM对象的方法时,都要评估这个方法会不会产生“重入问题”,如果发生“重入问题”,这个方法内的执行环境(变量或循环结构等)是否会被改变或破坏,是否需要对其他地方的代码进行调整。如果是这样的话,“重入问题”比“同步问题”轻松不了多少。

 

总之,请记住这样一个原则:“MTA 多线程套间”考虑“同步”,“STA 单线程套间”考虑“重入”。

 

更多深入的探讨请参考

COM本质论(简体)第五章套间 5.3跨套间访问 P193

 

com之套间 com之套间参考资料:《Essential COM》、《MSDN》 什么是套间    套间(Apartment),形象点,他就是一个用来装com对象的容器,一个套间内可以有多个Com对象,但是对于每个com对象在某一时刻只能够属于某一个套间。 套间用途和存在意义    假设你使用过Com。我们在一个线程A里创建了一个COM对象,那么在线程A里我们就可以访问该COM对象的 阅读详情

相关推荐

合金理论自动化工具包(Alloy-Theoretic Automated Toolkit:ATAT)的安装

合金理论自动化工具包(ATAT)是一个通用名称,指的是合金理论工具的集合,它包含了不同的代码工具,具体如下: 1)根据第一性原理(映射和映射)构造集群扩展的代码。簇展开是一种非常紧凑和有效的表达式,给出取代合金的能量作为其构型的函数(即原子的类型位于晶格的哪个位置)。 2)为了计算合金的热力学性质,从聚类展开开始,对晶格模型进行蒙特卡洛模拟(emc2和memc2)的代码。 3)执行晶格动力学计算的代码(fitfc, fitsvsl, svsl) 4)使用简单的物理或半经验模型计算电子和磁自由能贡献

qq_33400046的博客 1万+

COM套间

COM套间

求索 618

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定

本文为Fluent新手提供了7个排查'Floating point exception'错误的实用步骤,包括边界条件检查、时间步长优化、求解器配置等关键技巧。通过系统化的诊断流程,帮助用户快速定位并解决CFD仿真中的浮点异常问题,提升计算稳定性。

weixin_42531886的博客 286

COM之套间理解之二

  一、当主线程和辅助线程com库设置为COINIT_APARTMETNTHREADED时, 测试组件1设置为Single模式时,在辅助线程创建组件时,会出现死锁,此时辅助线程死锁的堆栈如下。ntdll.dll!_KiFastSystemCallRet@0()    user32.dll!_NtUserMessageCall@28()  + 0xc 字节   user32.dll!_Sen

技术之路 1391

同花顺 python量化交易_开启量化第一步!同花顺iFinD数据接口免费版简易操作教程...

来源:雪球App,作者: 同花顺-iFinD,(https://xueqiu.com/6706494343/141951051)金融市场波动频繁,投资往往会夹杂非理性的情绪。而量化交易,旨在以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,辅助投资者进行理性投资。不过计算机分析存在一定的技术门槛,有没有简单易学的量化交易方式,能够...

weixin_35911805的博客 2万+

Java + Selenium + TestNg + Allure Web UI 自动化

我们知道,在Python中针对Web UI自动化有Python + Selenium + Pytest/Unittest +Allure的技术栈。那么对于Java而言,也有其独特的Web UI 自动化技术栈。相同的,我们同样的运用Selenium框架,测试报告同样运用Allure。不同的是,我们运用的语言由Python转化为了Java,测试用例管理框架从Pytest转化为了TestNG。

qq_45594960的博客 1913

COM组件以及套间

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

SpringDou的博客 1386

mysql 学习笔记(1):mysql 基本概念和 mysql workbench 的基本使用方法

…

qq_52740163的博客 1355

在套间之间传递原始未列集的接口指针引起的死锁

60 Id: 15fc.2124 Suspend: 1 Teb: 7ef06000 Unfrozen ChildEBP RetAddr Args to Child 1140e4bc 770b8dcd 00000880 00000000 00000000 ntdll!ZwWaitForSingleObject+0x15 1140e520 770b8d98 00000000 000000

Xxin_W的专栏 1181

SAP Integration Suite 与 SAP Cloud Integration 的关系解析

SAP Cloud Integration是SAP Integration Suite套件的核心组件,专注于消息与流程集成。两者关系可概括为:Integration Suite是SAP BTP上的集成平台套件(iPaaS),而Cloud Integration是其中负责应用与B2B集成的关键能力。日常所说的"CPI"实际指代的是Integration Suite中的Cloud Integration功能。该套件还包含API管理、事件网格等其他集成能力,共同构成企业集成解决方案。理解这一层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 592

AI视频生成工作流开发:从产品拆解到带货视频全流程实现

本文介绍了一套完整的AI视频生成工作流开发方案,该系统能够自动分析产品素材并生成9个标准化分镜,支持白底图智能替换,最终输出专业带货视频。系统基于Coze平台搭建,整合豆包大模型及多模态生成模型,实现从产品分析、脚本生成到视频合成的全流程自动化。关键模块包括产品特征提取、智能分镜分配、视觉内容生成和用户交互调整,支持手动优化提示词和输出结果。该方案采用模块化设计,结合多种AI模型协同工作,为电商视频制作提供高效解决方案。

huanghm88的专栏 384

com之套间(Apartment)

com之套间参考资料:《Essential COM》、《MSDN》 什么是套间    套间(Apartment),形象点,他就是一个用来装com对象的容器,一个套间内可以有多个Com对象,但是对于每个com对象在某一时刻只能够属于某一个套间。 套间用途和存在意义    假设你使用过Com。我们在一个线程A里创建了一个COM对象,那么在线程A里我们就可以访问该COM对象的

阿波的专栏 5439

C#实现每日定时执行制定程序(附完整源码)

C#实现每日定时执行制定程序(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 864

COM多线程原理与应用

COM多线程原理与应用 目录: COM多线程原理与应用... 1 目录:... 1 前言:... 1 套间:... 1 套间的定义:... 1 套间的分类:... 2 套间的进入和退出:.. 2 对象的同步:... 2 组件对象的同步:... 2 COM对象线程模型:.. 2 进程内对象线程模型的种类:.. 3 ATL对多线程的支持:.. 3 对象引用的保护:... 3...

Dean Chen的专栏 7109

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

COM多线程原理与应用 (转)

<br />COM多线程原理与应用前言:<br />COM多线程一直是个不容易弄清的问题,我也被困扰了很久,特别是COM在线程方面的术语总是不能统一。本文是为了将我所学所用得做一个总结,本文不保证一定正确,但是会随着时间的推移逐渐完善改正。<br /><br /><br /><br />套间:<br />套间的定义:<br />我个人认为<<COM技术内幕>>中关于套间的定义是错误的,应采用<<COM本质论>>中的定义。<br /><br /><<COM技术内幕>>中-----<br /><br />套间(

guoxin_min的专栏 1059

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

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

13.浅析COM多线程

ATL一节已经接触过多线程一词,COM为了解决多线程问题的思路如下: 1.支持传统多线程访问,组件编写时处理多线程访问(MTA) 2.支持隐藏多线程细节,组件编写时无需多线程访问(STA) 前者是为了灵活,后者是为了方便和兼容,我们从这两点展开来说。 1.套间分类 COM引入一个概念——套间(Apartment),具有相同并发和重入访问特性的在同一套间。每个进程可包含多个套间

文洲的专栏 2022

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

泛说"COM线程模型"

我对“公寓 ”一词说实在一直不太搞得清楚,而企图上论坛问人的话他们总是喜欢回答:“你还是好好把《COM本质论》看一遍吧。”其实如果其中有些关键部分不理解的话,就算看上十遍也是不行的,我们需要的是一本适合自己的教材,今天偶尔发现这篇文章,所以转上来,希望读者能发表下意见。为了方便阅读,我对原文稍微进行了一些排版。===== 原文 =====泛说"COM线程模型" 作者:未知 来源:月

*无名小卒* 5771

COM多线程原理和应用

前言 COM多线程一直是个不容易弄清的问题,我也被困扰了很久,特别是COM在线程方面的术语总是不能统一。本文是为了将我所学所用得做一个总结,本文不保证一定正确,但是会随着时间的推移逐渐完善改正。 套间: 套间的定义:       我个人认为>中关于套间的定义是错误的,应采用>中的定义。>中----- 套间(Apartment),一个由用户界面线程(套间线程)和一个消息循环

fyzs19891124的博客 1209
上一篇: 值得纪念的一天
下一篇: 优快云 2008上海英雄会有感
剑心1977
博客等级 码龄20年 52粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值