COM的线程模型的问题,困惑我许久了...

zhxfzhxf1 2003-11-16 03:16:11
COM的线程模型有
Single Thread
Apartment (Single-Threaded Apartment, STA)
Free (Multi-Threaded Apartment, MTA)
Both
Windows 下有Neutral、Rental两种
现在如果我开发了一个组件,声明其为Apartment型的,希望以此来提高客户的响应时间(在多个用户连接时)。但是我所创建的组件需要在不同的Apartment中才能同时响应客户的请求,否则只能进行排队等候。
现在的问题是:如何控制创建的组件所在的Apartment,不能实现使用Apartment的预定效果。
请各位指教。

另外:
COM对象具体的体现是什么?
即Delphi如何自己创建一个COM对象,如何自己定义一个COM对象。

这些问题虽然有一点的了解,但总感觉不够清晰,因此提出问题。
...全文
54 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxfzhxf1 2003-11-17
  • 打赏
  • 举报
回复
To FrameSniper(§绕瀑游龙§)
对于Apartment模式,表示某一时刻只能被一个客户端线程进行访问
更确切地说是 一个Apartment中的对象只能被一个客户端线程进行访问, 但COM服务器可以同时有多个Apartment.
在COM服务器中只有一个APARTMENT时与 Single Thread服务器是一样的, 某一时刻只能被一个客户端线程进行访问

我所说的COM对象的具体表现 是 com服务器所提供的一个接口。


FrameSniper 2003-11-17
  • 打赏
  • 举报
回复
COM的线程模式只针对COM服务器中的COM对象而言的,说明一个COM对象可以被客户端进程中的若干个线程进行调用的方式,这些线程可能是多个客户端中多个不同的线程,也可能是同一个客户端中多个不同的线程....

对于Apartment模式,表示某一时刻只能被一个客户端线程进行访问,所以存在排队延迟问题。至于楼主说的如何控制COM对象所在组件的Apartment,我想本身问题就有问题,线程模式是在利用COM对象向导进行创建的时候就指定的,一个COM服务器中的所有COM对象的线程模型都是如此,一旦指定就已确定!至于如何解决延迟问题,我想唯一的方法就是指定COM服务器本生的实例模式了....

不太明白楼主所说的COM对象的具体表现指什么?
zhxfzhxf1 2003-11-17
  • 打赏
  • 举报
回复
像李维书中所说的.
一个客户端调用某一方法时需要5秒(仅产生一个5秒的延迟,并没有等待数据库锁等情况),当多个客户端同时调用时,理想的状态是 5秒 + 一个很小的时间.但时间上最后一个客户端调用完毕时,它所消耗的时间时 N*5 秒(N为客户端的数目).按照Apartment的想法,可以创建多个apartment来提高响应速度,提高并发性,这样最后一个返回的客户端所消耗的时间将极大地减少.

问题是,我不知道如何创建对象在不同的apartment中.

(问题和上面的描述中对"组件"\"对象"并不严格区分,原因是很多地方他们具有多种含义,另一方面,是我不是非常清楚地他们所具有的多种含义)
leapmars 2003-11-17
  • 打赏
  • 举报
回复
>>>>问题是,我不知道如何创建对象在不同的apartment中.

看看 TComponentFactory 的实现就知道了!
leapmars 2003-11-16
  • 打赏
  • 举报
回复
>>如何控制创建的组件所在的Apartment,不能实现使用Apartment的预定效果。

问题可以说得更明确些吗? 举个例子谈谈

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧