私のPCは、TCP接続を使用してデータを送信する2つの電子デバイスに接続されています。私はこのすべてのデータをログに記録できるDelphiプログラムを開発したいと思います。次のコードでは、2つのスレッドを使用して2つのTCPClientを作成します。私は1つのスレッドを使用して1つのデバイスからデータをログに記録できますが、2つのスレッドが実行されているときにアプリケーションがフリーズします。私はDelphiでプログラミング経験がありません、あまりにも多くの間違いがあれば申し訳ありません...私はDelphi 7を使用しています。アプリをフリーズするのを避けるために何ができますか? TThreadConn2 .Executeに予め別に(おそらくおそらくいくつかのより多くの助けを借りて、時間に修正されます)全体のデザインからDelphi 7 + Indy +マルチスレッドクライアント
//************************************************************************//
type TThreadConn1 = class(TThread)
private
protected
procedure Execute; override;
end;
type TThreadConn2 = class(TThread)
private
protected
procedure Execute; override;
end;
var
Form1: TForm1;
TCP1: TThreadConn1;
TCP2: TThreadConn2;
flag1: bool;
flag2: bool;
implementation
{$R *.dfm}
//******************************Connection 1******************************//
procedure TThreadConn1.Execute; //Connect+loop read buffer+disconnect
begin
Form1.IdTCPClient1.Connect;
While flag1 = false do
Form1.IdTCPClient1.CurrentReadBuffer;
Form1.IdTCPClient1.Disconnect;
end;
procedure TForm1.ButtonConnection1Click(Sender: TObject);
begin
flag1:=false;
TCP1 := TThreadConn1.Create(false); //Launch thread
end;
procedure TForm1.ButtonDisconnection1Click(Sender: TObject);
begin
flag1:=true;
if (TCP1.Terminated = false) then
TCP1.Terminate; //Is it ok to finish this way a thread?
end;
//******************************Connection2******************************//
procedure TThreadConn2.Execute; //Connect+loop read buffer+disconnect
begin
Form1.IdTCPClient2.Connect;
While flag2 = false do
Form1.IdTCPClient1.CurrentReadBuffer;
Form1.IdTCPClient2.Disconnect;
end; { of procedure }
procedure TForm1.ButtonConnection2Click(Sender: TObject);
begin
flag2:=false;
TCP2 := TThreadConn2.Create(false);
end;
procedure TForm1.ButtonDisconnection2Click(Sender: TObject);
begin
flag2:=true;
if (TCP2.Terminated = false) then
TCP2.Terminate;
end;
end.
ありがとう、あなたのコードは私にとって非常に役に立ちました。それが他の人にも役立つことを願っています。 – user1361263