请问高手,三层结构线程问题 (100分)

  • 主题发起人 主题发起人 vibowl
  • 开始时间 开始时间
V

vibowl

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现如下功能在Client按一个按纽执行AppServer的一个方法,不要等到服务服执行完才响应,可以继续其它操作,所以我在客户端写了一个Thread,但是发现调用Appserver方法时,在线程必须做Synchronize,否则调用出错,而如果做Synchronize就达不到我的目的,请问是什么原因?或者用别的什么方法也可以实现?
 
做Synchronize,就把主线程阻塞了,主线程一直等到Thread调用返回后,才能做其他操作。
 
我也遇到了这个问题,正在寻找解决方案...
 
你的问题我也碰到过,你是想在线程里调用COM对象的方法:
做法:
uses comobj;
var NeedUninitialize:boolean;
1)初始化:
procedure init_com;
//必须在thread.execute内执行
begin
NeedUninitialize :=Succeeded( CoInitialize(nil));
try
com1:=TIcom.Create(nil);//com1 为你设定的变量
com1.RemoteMachineName:=serveripaddress;//服务器地址
com1.Connect;
//连接服务
if com1=nil then
thread1.Terminate;
//不成功终止线程
except
//自己添代码
end;
end;
注意在退出线程时必须检查释放相关接口调用:
可使用if NeedUninitialize then
CoUninitialize;
不尽完美之处请各位指正;
your friend xycall;
 
另外,上述代码也可以写成这样(注意:前面代码是我写的服务用到的,下面的是通用的)
做法:
uses comobj;
var NeedUninitialize:boolean;
1)初始化:
procedure init_com;
//必须在thread.execute内执行
begin
NeedUninitialize :=Succeeded( CoInitialize(nil));
try
com1:=coIcom.CreateRemote(serveripaddress);//com1 为你设定的变量
.........//自己的代码
if com1=nil then
thread1.Terminate;
//不成功终止线程
except
//自己添代码
end;
end;
注意在退出线程时必须检查释放相关接口调用:
可使用if NeedUninitialize then
CoUninitialize;
不尽完美之处请各位指正;
your friend xycall;

 
最后我是跟 xycall同样方法解决的。因为访问了Vcl SocetConnection所以必需Synchronize,只好在方法另建DCOM连接。谢谢大家!
 
>>因为访问了Vcl SocetConnection所以必需Synchronize
在线程里边创建SocetConnection的话就可以不用Synchronize 吧
 
使用Synchronize是最简单的方法,但绝对不是一个好方法,我上面介绍的方法已实际编程
使用通过。
You friend Xycall;
you can send email:zzhs@163.com, if you want to discuss with me!
 
接受答案了.
 
后退
顶部