【发布时间】:2015-02-07 08:43:39
【问题描述】:
创建将使用 IdTCPClient1 读取接收到的数据的线程的正确方法是什么?并且所有的数据都是TStream或者Tmemorystream的形式。
我试过了:
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。 -
@RemyLebeau 我误读了这个问题。感谢您的提示。我的评论被删除了。
标签: multithreading delphi delphi-7 indy indy10