各位朋友大家好,本人刚开始研究多线程,还有很多不明白的地方,望大家指教,谢谢!
问题是这样的:
定义两个线程,当按钮连接时执行连接创建一个线程序,连接成功后执行查询按扭再创建一个线程,现在问题是查询线程
中无法利用 连接线程的SocketConnection1,如何同步呢?
部分代码如下:定义:
  type
  Tthread1 = class(Tthread)
  protected
  procedure Execute;override;
  procedure getSocketConn;
  end;  type
  Tthread2 = class(Tthread)
  protected
  procedure Execute;override;
  procedure getClientDataSet;
  end;procedure Tthread1.Execute;
begin  Try
  FreeOnTerminate:=true;
  ConToolsFrm.SocketConnection1.ServerGUID:='{2C8E3F43-ABE4-11D4-B352-00E04C67568C}';
  ConToolsFrm.SocketConnection1.ServerName:='apply_tier.Apply_data';
  ConToolsFrm.SocketConnection1.Connected:=False;
  ConToolsFrm.SocketConnection1.Host:= ConToolsFrm.edtHost.Text;
  ConToolsFrm.SocketConnection1.Connected:=True;
  ShowMessage('连接成功!');
  Except
  ShowMessage('连接失败,请断开后再试!');
  ConToolsFrm.SocketConnection1.Connected:=False;
  end;
end;procedure Tthread2.Execute;
var
  sqlStr:string;
begin
  ConToolsFrm.ClientDataSet1.Close;
  ConToolsFrm.ClientDataSet1.RemoteServer:=ConToolsFrm.SocketConnection1;
  ConToolsFrm.ClientDataSet1.ProviderName:='provider7';
  sqlStr:=ConToolsFrm.edtSql.Text;  ConToolsFrm.SocketConnection1.appserver.zyyf_pub_pro(sqlStr, 'o');
  ConToolsFrm.ClientDataSet1.Open; //该部分直接跳走没有运行
  if ConToolsFrm.ClientDataSet1.RecordCount=0 then
  begin
  if ConToolsFrm.FindProcess('apply_tier.exe') then //中间层正在运行
  begin
  //重启 SOCKET SERVER
  ConToolsFrm.StartService('SocketServer');
  //关闭apply_tier进程
  ConToolsFrm.EndProcess('apply_tier.exe');
  end;
  end;
end;//连接
procedure TConToolsFrm.btnConnectClick(Sender: TObject);
begin
 mythread1:=Tthread1.Create(false);
end;procedure TConToolsFrm.btnSelectClick(Sender: TObject);
begin
 mythread2:=Tthread2.Create(false);
end;