www.pudn.com > Indy10_New_Demo.rar > ClientThread.pas
unit ClientThread;
interface
uses
Classes,
IdGlobal, IdTCPClient, IdThread;
type
TClientThread = class(TIdThread)
protected
FCount: Cardinal;
FHost: string;
FReconnect: Boolean;
FTCPClient: TIdTCPClient;
FTimeFinish: Cardinal;
FTimeStart: Cardinal;
//
procedure AfterRun; override;
procedure BeforeRun; override;
procedure Run; override;
public
function Time: Cardinal;
//
property Count: Cardinal read FCount;
property Host: string read FHost write FHost;
property Reconnect: Boolean read FReconnect write FReconnect;
end;
var
GThreads: TThreadList = nil;
implementation
uses
SysUtils;
{ TClientThread }
procedure TClientThread.AfterRun;
begin
if not Reconnect then begin
FTCPClient.WriteLn('Quit');
FTCPClient.Disconnect;
end;
FreeAndNil(FTCPClient);
FTimeFinish := GetTickCount;
inherited;
end;
procedure TClientThread.BeforeRun;
begin
inherited;
FTimeStart := GetTickCount;
GThreads.Add(Self);
FTCPClient := TIdTCPClient.Create(nil);
with FTCPClient do begin
Host := FHost;
Port := 6000;
if not Reconnect then begin
Connect;
end;
end;
end;
procedure TClientThread.Run;
begin
with FTCPClient do begin
if Reconnect then begin
Connect;
end;
WriteLn('Kudzu');
ReadLn;
if Reconnect then begin
WriteLn('Quit');
Disconnect;
end;
end;
Inc(FCount);
end;
function TClientThread.Time: Cardinal;
begin
Result := GetTickDiff(FTimeStart, FTimeFinish) div 1000;
end;
initialization
GThreads := TThreadList.Create;
finalization
FreeAndNil(GThreads);
end.