我有Delphi lib,它必须通过套接字读取信息读取。Delphi:如何使用线程等待所有信息从套接字读取
function GetBufferInfo(Address: PChar): PChar; export; stdcall;
var
BD: TBufferData;
begin
BD := TBufferData.Create;
Result := PChar(TBufferData.GetData);
BD.Free;
end;
TBufferData类有一个方法ReadData,它在套接字Read事件触发时被调用。所以可以多次调用它,直到读取所有信息。问题是如何在读取信息的同时等待GetBufferInfo方法。我想过线程,但不知道如何完成它。
我创建这表明了问题的一个小例子:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes, Windows;
type
TBufferData = class
private
FResult: string;
public
constructor Create;
procedure ReadData(Sender: TObject; Buf: string; var Size: Integer);
function GetData: string;
end;
{ TBufferData }
var
BD: TBufferData;
s: string;
{ TBufferData }
constructor TBufferData.Create;
begin
FResult := 'Some text received via socket';
end;
function TBufferData.GetData: string;
begin
Result := FResult;
end;
procedure TBufferData.ReadData(Sender: TObject; Buf: string; var Size: Integer);
begin
//info is being received from socket
FResult := FResult + Buf;
end;
begin
BD := TBufferData.Create;
s := BD.GetData;
Writeln(s);
BD.Free;
Readln;
end.
在此先感谢 由良
GetBufferInfo返回一个指向已被释放的内存的指针。至于问题的其余部分,我看不到ReadData是如何被调用的。 –