请高手帮忙看一下错误出在哪里?

icecsdn 2004-10-11 03:19:40
其中linktest是在TRemoteDataModule中定义的接口,如果我把SocketConnection1.AppServer.linktest(opno);放到线程里就会出错,如果不把它放到线程里就没问题。线程是这样的
procedure TCheckConThread.Execute;
var
opno:Widestring;
begin
inherited;
opno:='error';
try
Form1.SocketConnection1.AppServer.linktest(opno);
except
on e:Exception do
begin
end;
end;
end;
错误提示是invalid argument。请指教~
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天行归来 2004-10-12
  • 打赏
  • 举报
回复
线程内部可以自创建一个SocketConnection 照样可以访问服务器端的方法。
icecsdn 2004-10-12
  • 打赏
  • 举报
回复
不能换,我的目的就是要看SocketConnection1是否可以访问服务器端的方法,有没有好的解决办法?
天行归来 2004-10-12
  • 打赏
  • 举报
回复
SocketConnection1 不要放在主线程上,线程内部可以自创建一个SocketConnection试试。因为访问主线程的对象需要同步。
icecsdn 2004-10-11
  • 打赏
  • 举报
回复
up
icecsdn 2004-10-11
  • 打赏
  • 举报
回复
如果Form1.SocketConnection1.AppServer.linktest(opno);这句出错,那么程序象死了一样,怎样才可以让它不耽误程序的运行,同时的时候程序仍然可以进行别的操作?只是到except里给个错误提示就可以了
icecsdn 2004-10-11
  • 打赏
  • 举报
回复
按你说的确实是不出错误了,请解释一下是为什么吗?
天行归来 2004-10-11
  • 打赏
  • 举报
回复
线程里面如果访问其他线程,比如主线程的东西,一定要同步出去,呵呵,否则后果有你受的。
uses Form1,SysUtils;

procedure TCheckConThread.DoLinkTest();
var
opno:Widestring;
begin

opno:='error';
try
Form1.SocketConnection1.AppServer.linktest(opno);
except
on e:Exception do
begin
end;
end;

end;

procedure TCheckConThread.Execute;
var
opno:Widestring;
begin

inherited;
Synchronize(DoLinkTest);

end;
你的线程里面的代码也有点怪,线程启动完之后,就结束了。
一般线程Execute处理代码如下:
procedure TDJS21Thread.Execute;
begin

[CoInitialize(nil);]
//初始化线程一些参数[InitParam();]
while not Terminated do
begin
//处理
end;
//释放线程占用的一些资源等[FreeParam();]
[CoUninitialize();]

end;

1,593

社区成员

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

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