描述:
最近在看com套件的线程管理,有点疑问,特此请教:
潘爱民《COM原理与应用》第134页有以下说明:
(1)(2)省略;
(3)客户和对象运行在同一个进程中,对象运行在套件线程中,客户运行在另一个套件线程或自由线程中。因为对象运行在它自己的套件线程中,所以客户调用总需要列集处理,com自动实现同步处理...;
(4)客户和对象运行在同一个进程中,对象运行在自由线程中,客户运行在另一个套件线程或自由线程中。当客户调用自由线程中的对象时,虽然对象被自由线程所创建,但调用实际上在客户的线程中执行,所以客户对接口的调用是直接进行的,因此接口列集是不必要的,但...;
//-------------------------------------------
但是在《ATL开发指南》第二版的401页,有图如下:
由于不能粘贴图片,我描述如下:
基于线程管理模型的组件访问和创建
------------------------------------------------------------------------------
客户端程序单元 服务器的标记 指针访问/结果
-------------------------------------------------------------------------------
主STA Apartment 直接访问。组件在主STA中创建
非主STA Apartment 直接访问。组件在客户程序的STA中创建
MTA Apartment 代理访问。组件在由COM创建的STA中创建
//-----------------------------------------------------------------------------
主STA Free 代理访问。组件在MTA中创建
非主STA Free 代理访问。组件在MTA中创建
MTA Free 直接访问。组件在MTA中创建
//--------------------------------------------------------
主STA 表明在过程中创建的第一个STA.