多线程高手进来帮个忙,thanks!!!(40分)

  • 主题发起人 主题发起人 pengd
  • 开始时间 开始时间
P

pengd

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在Win2000+dephi 6.0做一个三层结构应用程序,客户端用socketconnection进行连接中间层应用程序
服务器,其属性设置如下:
socketconnection.Address:=‘192.168.252.1’;//我机器的IP
socketconnection.ServerName:=‘PrjMtsUnit.MTUnit';//中间层应用程序服务名
我在设计阶段直接把socketconnection.connected设置为true,程序能连接服务器,正常!
在中间层的机器上,假设没有运行SCKTSRVR.EXE时,客户端应用程序就没有响应,处于死机
状态,因此我用多线程处理进行连接,在主窗体创建另一个子线程。多线程程序如下:
声明部分:
TsocketThread = class(TThread) { 声明线程类 }
private
procedure connected();
protected
procedure Execute;
override;{ 执行线程的方法}
public
constructor Create();
virtual;
{ 线程构造器 }
end;
实现部分:
constructor TsocketThread.Create();
begin
inherited Create(True);
FreeOnTerminate := true;
end;
procedure TsocketThread.connected();{线程的方法的定义}
begin
with form1do
begin
try
Socketconnection.Connected:=true;
StatusBar1.simpletext:='服务器已经启动scktsrvr.exe,检验成功!';
except
StatusBar1.simpletext:='服务器没有启动scktsrvr.exe,检验失败!';
end;
end;
end;
procedure TsocketThread.Execute;{ 执行线程的方法 }
begin
connected
end;
下面是窗体按纽事件:
检验连接按纽事件:
procedure TForm1.CheckBtnClick(Sender: TObject);
socketThread:=TsocketThread.create;
socketThread.resume;
end;
终止按纽事件:
procedure TForm1.CancelBtnClick(Sender: TObject);
begin
if socketThread<>nil then
begin
socketThread.terminate;
end;
end;
上面的程序能够正常执行,当我按检验连接按纽时,若SCKTSRVR.EXE有启动,连接成功,但是当我退出程序窗体时就出错,它说:code 1400,无效的句柄;搞了很久还是不行。
请问各位兄弟是什么原因,怎么解决呢?
 
后退
顶部