![]() |
Re: Prgramm hängt troz Thread.
soweit ich das weiß benutzt doch die TidTelnet Komponente von Hause aus Threads.
Oder man kann sie so konfigurieren das sie es tut. Es ist also in keinster Weise notwendig Deine Telnet Session in einen eigenen Thread auszulagern. Ausserdem ist Telnet Ereignis gesteuert. Du kannst Daten im Ereignis OnDataAvailable auslesen. Btw. welche Indy Version nutz Du? Grüße Klaus |
Re: Prgramm hängt troz Thread.
Ahh es hat sich erledigt :P
Man musste nur die Option TreadesEvent auf true stellen |
Re: Prgramm hängt troz Thread.
also so dürfte alles im Thread ablaufen ... glaub ich :angel2:
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:
aber wenn es (so wie Klaus01 meint) auch ohne Thread geht, dann würde ich es auch ohne machen.
Telnet := TTelnetThread.Create('xtain.net', 3118);
... Telnet.Send('...'); ... Telnet.Terminate; 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. |
Re: Prgramm hängt troz Thread.
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz