procedure TClientHandleThread.HandleInput;
begin
Form1.Memo1.Lines.Add(PubMsg);
Form1.CornerButton1.Enabled := True;
end;
procedure TClientHandleThread.Execute;
begin
while not Terminated do begin
if Form1.IdTCPClient1.Connected then begin
try
Form1.IdTCPClient1.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
PubMsg := Form1.IdTCPClient1.IOHandler.ReadLn;
if not Form1.IdTCPClient1.IOHandler.ReadLnTimedout then begin
Synchronize(HandleInput);
end;
except
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Disconnect;
end;
procedure TForm1.CornerButton1Click(Sender: TObject);
begin
CornerButton1.Enabled := False;
if IdTCPClient1.Connected then begin
IdTCPClient1.IOHandler.InputBuffer.Clear;
IdTCPClient1.IOHandler.WriteLn('TestData');
end else begin
IdTCPClient1.Host := '111.111.111.111';
IdTCPClient1.Port := 12345;
try
IdTCPClient1.Connect;
finally
IdTCPClient1.IOHandler.InputBuffer.Clear;
IdTCPClient1.IOHandler.WriteLn('TestData');
end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if IdTCPClient1.Connected then IdTCPClient1.Disconnect;
if Assigned(ClientHandleThread) then ClientHandleThread.Terminate;
질문
쌀통닭
안녕하세요.. 델파이 11로 안드로이드 개발을 하고 있습니다.
대략 소스는 아래와 같은데.. 처음 연결 후 데이타 주고 받는건 잘 되는데.. 이상하게 Button1Click을 해서
한번 끊으면 그 후에는 받지를 못합니다.
IdTCPClient1.Disconnect; 실행 후 CornerButton1Click을 해보면 서버에 잘 들어오고 서버가 리턴을 해주는데
받지를 못합니다.
끊으면 쓰레드가 멈추는건지.. 왜 이런현상이 나타날까요 ?
----------------------------------------------------------------------------------------------------------
procedure TClientHandleThread.HandleInput;
begin
Form1.Memo1.Lines.Add(PubMsg);
Form1.CornerButton1.Enabled := True;
end;
procedure TClientHandleThread.Execute;
begin
while not Terminated do begin
if Form1.IdTCPClient1.Connected then begin
try
Form1.IdTCPClient1.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
PubMsg := Form1.IdTCPClient1.IOHandler.ReadLn;
if not Form1.IdTCPClient1.IOHandler.ReadLnTimedout then begin
Synchronize(HandleInput);
end;
except
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Disconnect;
end;
procedure TForm1.CornerButton1Click(Sender: TObject);
begin
CornerButton1.Enabled := False;
if IdTCPClient1.Connected then begin
IdTCPClient1.IOHandler.InputBuffer.Clear;
IdTCPClient1.IOHandler.WriteLn('TestData');
end else begin
IdTCPClient1.Host := '111.111.111.111';
IdTCPClient1.Port := 12345;
try
IdTCPClient1.Connect;
finally
IdTCPClient1.IOHandler.InputBuffer.Clear;
IdTCPClient1.IOHandler.WriteLn('TestData');
end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if IdTCPClient1.Connected then IdTCPClient1.Disconnect;
if Assigned(ClientHandleThread) then ClientHandleThread.Terminate;
Action := TCloseAction.caFree;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientHandleThread := TClientHandleThread.Create(False);
ClientHandleThread.FreeOnTerminate := True;
end;
이 댓글 링크
다른 사이트에 공유하기
4 answers to this question
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.