大概像这样,至于线程怎么写,自己找找资料吧type TThr=class(TThread) protected procedure Execute;override; end;procedure TThr.Execute; begin try while not Terminated do begin if not Form1.IdTcpClient1.Connected then Terminate else begin try Form1.IdTcpClient1.ReadBuffer(...); {读数据} {用同步处理数据Synchronize} except {读数据异常处理} end; end; end; except end; end;
type TRecvThread = class(TThread) private FOnMethod: TThreadMethod; procedure DoMethod; protected procedure Execute; override; public property OnMethod: TThreadMethod read FOnMethod write FOnMethod; end; procedure DoMethod; begin if Assigned(FOnMethod) then FOnMethod; end; procedure TRecvThread.Execute; begin while not Terminated do begin try DoMethod(); except sleep(1); continue; end; end; end;// 写个TThreadMethod方法给TRecvThread的对象就可以了。 var RecvThread: TRecvThread; RecvThread := TRecvThread.Create(True); RecvThread.OnMethod := MyThreadMethod; RecvThread.Resume;(Start)
TThr=class(TThread)
protected
procedure Execute;override;
end;procedure TThr.Execute;
begin
try
while not Terminated do
begin
if not Form1.IdTcpClient1.Connected then
Terminate
else begin
try
Form1.IdTcpClient1.ReadBuffer(...); {读数据}
{用同步处理数据Synchronize}
except
{读数据异常处理}
end;
end;
end;
except
end;
end;
TRecvThread = class(TThread)
private
FOnMethod: TThreadMethod;
procedure DoMethod;
protected
procedure Execute; override;
public
property OnMethod: TThreadMethod read FOnMethod write FOnMethod;
end; procedure DoMethod;
begin
if Assigned(FOnMethod) then
FOnMethod;
end; procedure TRecvThread.Execute;
begin
while not Terminated do
begin
try
DoMethod();
except
sleep(1);
continue;
end;
end;
end;// 写个TThreadMethod方法给TRecvThread的对象就可以了。
var
RecvThread: TRecvThread; RecvThread := TRecvThread.Create(True);
RecvThread.OnMethod := MyThreadMethod;
RecvThread.Resume;(Start)
在线程中不断检测是否收到指令,如果收到则写入一个全局的StringList,
在主程序中用一个Timer来检测StringList里面是否有值