博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入DCOM之MTA (转)
阅读量:2497 次
发布时间:2019-05-11

本文共 692 字,大约阅读时间需要 2 分钟。

深入DCOM之MTA (转)[@more@] 

运行再MTA中的线程不需要消息机制,因为COM直接通过的v-table来对象的接口,所以在MTA中的COM对象没有同步机制,需要自己通过临界区、事件等机制来实现同步,COM对象的接口指针也可以直接在MTA的线程之间传递。

通过调用CoInitializeEx(NULL, COINIT_MULTITHREADED)来声明支持MTA,客户端代码调用CoInitializeEx(NULL, COINIT_MULTITHREADED)创建MTA,一个进程中最多只能创建一个MTA,所以第一个调用CoInitializeEx的线程创建一个MTA,之后再调用CoInitializeEx的线程则加入该MTA。

客户端和组件之间一共有八种线程 组合,进程内的四种是:STA-STA,STA-MTA,MTA-STA,MTA-MTA,同样进程外有四种。如何选择线程模式呢,基本的规则是与 交互的组件应该使用STA,每个显示窗口的应用已经有一个消息循环了,STA自然就很适合。没有用户界面的组件最好使用MTA,因为MTA模式比STA更快,因为不需要同步,而且MTA到MTA的调用不需要marshal接口,而STA到STA或者MTA到STA的调用需要marshal接口。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-959294/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-959294/

你可能感兴趣的文章
sessionStorage
查看>>
如何在工作组环境win 7远程管理Hyper-v server R2 SP1配置(二)
查看>>
Promise API
查看>>
第二章实践小结
查看>>
[Notes] 查看Linux系统支持的shell
查看>>
有道词典的翻译接口
查看>>
代码示例_进程
查看>>
PLSQL数据导入导出问题解决(空表、大字段表、表空间错误等)
查看>>
一个屌丝程序猿的人生(七十六)
查看>>
路由协议
查看>>
统计第一个空字符前面的字符长度(java实现)
查看>>
struts2博客学习之旅
查看>>
阻塞、非阻塞的概念和select函数的阻塞功能
查看>>
在Ubuntu64位加安装H3C的INode客户端软件
查看>>
Centos6系统yum升级安装程序库错误解决方法
查看>>
__tostring()和__invoke()的用法
查看>>
作业6
查看>>
es6中promise的用法
查看>>
实现双向绑定
查看>>
java websocket开发的客户端程序
查看>>