also so dürfte alles im Thread ablaufen ... glaub ich
Delphi-Quellcode:
UNIT mTTelnetThread;
interface
uses
Classes,
SysUtils,
Windows,
Dialogs,
SyncObjs,
IdBaseComponent,
IdComponent,
IdTCPConnection,
IdTCPClient,
IdTelnet;
type
TTelnetThread =
CLASS(TThread)
private
FHost:
String;
FPort: Integer;
FTelnet: TIdTelnet;
FCSection: TCriticalSection;
FSend:
String;
protected
procedure Execute;
override;
public
constructor Create(
const Host:
String; Port: Integer);
destructor Destroy;
override;
procedure Send(Value:
String);
end;
implementation
constructor TTelnetThread.Create(
const Host:
String; Port: Integer);
begin
inherited Create(true);
FHost := Host;
FPort := Port;
FSend := '
';
UniqueString(FHost);
FTelnet := TIdTelnet.Create(
nil);
FTelnet.Host := FHost;
FTelnet.Port := FPort;
FCSection := TCriticalSection.Create;
Resume;
end;
destructor TTelnetThread.Destroy;
begin
FCSection.Free;
FTelnet.Free;
end;
procedure TTelnetThread.Execute;
var
S:
String;
begin
FTelnet.Connect;
repeat
FCSection.Enter;
try
S := FSend;
FSend := '
';
finally
FCSection.Leave;
end;
if S <> '
'
then
FTelnet.WriteLn(S)
else Sleep(50);
// CPU-Last im Leerlauf senken
until Terminated;
FTelnet.Disconnect;
end;
procedure TTelnetThread.Send(Value:
String);
begin
while Value <> '
'
do
begin
FCSection.Enter;
try
if FSend = '
'
then
begin
FSend := Value;
UniqueString(FSend);
Value := '
';
else Sleep(50);
// CPU-Last der Schleife senken
finally
FCSection.Leave;
end;
end;
end;
end.
Delphi-Quellcode:
Telnet := TTelnetThread.Create('xtain.net', 3118);
...
Telnet.Send('...');
...
Telnet.Terminate;
aber wenn es (so wie Klaus01 meint) auch ohne Thread geht, dann würde ich es auch ohne machen.
Tutorials ... da finden sich unmassen an Threads in der
DP und soweit ich weiß, steht sehr viel in der
OH und Delphi hat sogar eine Threaddemo mit an Board.