1
創建將使用IdTCPClient1讀取接收數據的線程的正確方法是什麼?並且所有數據都以TStream或Tmemorystream格式。使用Indy讀取線程中的TStream數據
我想:
constructor TReadResponse.Create(AConn: TIdTCPConnection);
begin
FConn := AConn;
inherited Create(False);
end;
procedure TReadResponse.Execute;
var
RcvStrMem : TMemoryStream;
begin
while not Terminated and FConn.Connected do
begin
try
RcvStrMem := TMemoryStream.Create;
FConn.IOHandler.LargeStream := True;
FConn.IOHandler.ReadStream(RcvStrMem, -1, False);//error here ??
//MessageBox(0, pChar(inttostr(RcvStrMem.Size)), 0, 0);
TWriteResponse.AddResponse(RcvStrMem);
finally
RcvStrMem.Free;
end;
end;
end;
WriteResponse線程
class procedure TWriteResponse.AddResponse (AResponse: TStream);
begin
with Create(AResponse) do try
Synchronize;
finally
Free;
end;
end;
procedure TWriteResponse.DoSynchronize;
begin
//do something
end;
下面是如何執行在Form1上線:
var
rr: TReadResponse = nil;
......
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
rr:= TReadResponse.Create(IdTCPClient1);
end;
@iPathツ:此代碼是**客戶端**。 'TIdTCPClient'不是線程組件,所以需要手動線程。您正在考慮'TIdTCPServer'。 – 2015-02-07 18:47:50
@RemyLebeau我誤解了這個問題。感謝提示。我的評論被刪除。 – 2015-02-07 22:50:41