Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prgramm hängt trotz Thread. (https://www.delphipraxis.net/138805-prgramm-haengt-trotz-thread.html)

Klaus01 18. Aug 2009 10:23

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

Deltachaos 18. Aug 2009 10:32

Re: Prgramm hängt troz Thread.
 
Ahh es hat sich erledigt :P
Man musste nur die Option TreadesEvent auf true stellen

himitsu 18. Aug 2009 10:34

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:
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.

Mithrandir 18. Aug 2009 11:20

Re: Prgramm hängt troz Thread.
 
Zitat:

Zitat von Deltachaos
[edit=Luckie]Rechtschreibfehler im Titel korrigiert. Mfg, Luckie[/edit]

Dann aber auch konsequent, bitte. ;)

Zitat:

Prgramm hängt trotz Thread.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz