TAutoObjectFactory Midas的問題﹖(300分)

  • 主题发起人 主题发起人 coolzew
  • 开始时间 开始时间
C

coolzew

Unregistered / Unconfirmed
GUEST, unregistred user!
TAutoObjectFactory.Create(ComServer, TAAA, CLASS_AAA,
ciMultiInstance,
tmApartment);
我發現上述代碼中﹐我把線程模式改為tmSingle和tmApartment效果
是一樣的。用GetCurrentThreadID測試得出不同客戶端是同一個ThreadID
號。不知誰能解釋一下﹖﹖﹖
此外為何用如下代碼﹐同樣的方法有時創建的AppServer能工作在
Apartment中有時卻只能工作在Single中。有誰知道嗎﹖
TComponentFactory.Create(ComServer, Ttest111,
Class_test111, ciMultiInstance, tmApartment);
 
别被GetCurrentThreadID的假象迷惑了,
你自己试试,一个客户端调用,然后服务段Sleep,另一个客户端取调用,有没有阻赛
没有的话,就是多线程的
 
最后一次提前該問題﹐有些失望﹗
good luck! ^_^
 
线程模式只对内进程COM服务器有影响,所以如果你用类工厂创建的是一个外进程服务器
(即EXE文件),改变线程模式对它没有影响,有影响的只是实例模式。
GetCurrentThreadID只是取得当前运行的线程ID,如果你用单客户端存取COM服务器,则很
可能每次生成的线程的ID都是一样的,随便你能模拟出多客户程序并发的情况。
另外,我不明白你的"有时工作在Apartment中,有时在Single中怎么理解"
李Sir的系统篇我看了也模糊,他把线程模式和实例模式说得太含糊了,以上是我的理解。
 
今天在测试另一个富翁提出的问题时,发现线程模式的改动虽然对自动化对象的操作没有影响,
但对外进程服务器的主线程--即那个界面窗体操作有影响。
当COM对象回调客户端时,如果客户端进程阻塞住(ShowMessage)时,tmApartment模式时,服务
器界面会停住,但COM对象照样操作,而tmFree时,则界面不受影响。
唉,我们对COM的理解实在是太小了,多交流。
 
[blue]謝謝各位的參與。
good luck! ^_^[/blue][:)][:)]
 
后退
顶部