Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Deltachaos 17. Aug 2009 22:54


Prgramm hängt trotz Thread.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.
Ich habe ein Problem und zwar habe ich volgenden Code:

Delphi-Quellcode:
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, mtTelnetThread;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    Telnet : TTelnetThread;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Telnet := TTelnetThread.create;
  Telnet.Connect('xtain.net', 1338);
end;

end.
Der Tread:
Delphi-Quellcode:
UNIT mTTelnetThread;

interface

uses
  classes,
  sysUtils,
  Dialogs;

type
     public
        constructor create; virtual;
        function Connect(Host: String; Port: Integer): boolean; virtual;

   end;

implementation

constructor TTelnetThread.create;
begin
  inherited create(true);
  freeOnTerminate := true;
end;


function TTelnetThread.Connect(Host: String; Port: Integer): boolean;
begin
  sleep(9999999);
end;
Nunja das Problem ist klar das Das Programm troz eigenem tread hängt. Hat wer ne Idee?

[edit=Luckie]Rechtschreibfehler im Titel korrigiert. Mfg, Luckie[/edit]
[edit=mkinzler]Rechtschreibfehler konsequent im Titel korrigiert :zwinker: Mfg, mkinzler[/edit]

Muetze1 17. Aug 2009 23:06

Re: Prgramm hängt troz Tread.
 
Du hast keinen Thread sondern du rufst ja Sleep direkt auf. Das was in einem TThread Nachfahren parallel abläuft ist alles was in der Methode Execute drin steht. Und diese muss überschrieben werden - mal abgesehen von anderen Unzulänglichkeiten in deinen kleinen Codeschnipseln...

Deltachaos 18. Aug 2009 00:28

Re: Prgramm hängt troz Tread.
 
Also ich habe das ganze mal so gemacht wie su sagtest.
für einen Sleep funktioniert das sogar.
Das problem ist das ich damit eigentlich eine Telnetverbindung herstellen möchte ohne das bei offner verbindung das formular hängt.

wenn ich das also so mache hängt das form:

Delphi-Quellcode:
procedure TTelnetThread.execute;
begin
  IdTelnet1.Host := Host;
  IdTelnet1.Port := Port;
  try
    IdTelnet1.Connect();
//    IsConnect := True;
  except
//    IsConnect := False;
  end;
end;
Ne idee?

Verbindung kommt aber beim Server an ;)
Wenn ich dann Disconnecte dann läst sich das Form auch wieder bewegen

Die Muhkuh 18. Aug 2009 00:30

Re: Prgramm hängt troz Tread.
 
Zeig mal kompletten Code.

sx2008 18. Aug 2009 01:16

Re: Prgramm hängt troz Tread.
 
Zitat:

Zitat von Deltachaos
Das problem ist das ich damit eigentlich eine Telnetverbindung herstellen möchte ohne das bei offner verbindung das formular hängt.

Also: ein Formular soll erzeugt werden und sichtbar werden.
*Danach* soll eine Telnet-Verbindung gestartet werden und während dieser Zeit soll eine Sanduhr angezeigt werden,
damit der Benutzer weiss, dass das Programm noch arbeitet.

Um dieses Verhalten zu erreichen brauchst du keinen Thread!
Leider hat ein Formular nicht das Event OnAfterShow.
Aber dem kann man nachhelfen.
Falls ich dich überzeugt habe, dass ein Thread hier nicht angebracht ist, kriegst du mehr Infos dazu.

Deltachaos 18. Aug 2009 10:03

Re: Prgramm hängt troz Tread.
 
Die Telnetverbindung soll aber den ganzen Programmablauf über geöffnet sein.
Solange dies der Fall ist hängt das Formular.
Hier der ganze Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Telnet := TTelnetThread.create;
  Telnet.SetVars('xtain.net', 3118);
  Telnet.Resume;
 
  //Telnet.Disconnect;
  //Telnet.Resume;
end;
Der Thread:
Delphi-Quellcode:
UNIT mTTelnetThread;

interface

uses
  classes,
  sysUtils,
  windows,
  Dialogs,
  IdBaseComponent,
  IdComponent,
  IdTCPConnection,
  IdTCPClient,
  IdTelnet;

type
   TTelnetThread = CLASS(TThread)
     private
       IdTelnet1: TIdTelnet;
       Host: String;
       Port: Integer;

     protected
        procedure execute; override;

     public
        constructor create; virtual;
        procedure Disconnect; virtual;
        procedure Send(Value: String); virtual;
        procedure SetVars(fHost: String; fPort: Integer); virtual;
   end;

implementation


constructor TTelnetThread.create;
begin
  inherited create(true);
  freeOnTerminate := true;
  IdTelnet1 := TIdTelnet.Create(nil);
end;

procedure TTelnetThread.execute;
begin
  IdTelnet1.Host := Host;
  IdTelnet1.Port := Port;
  try
    IdTelnet1.Connect();
//    IsConnect := True;
  except
//    IsConnect := False;
  end;
end;

procedure TTelnetThread.Send(Value: String);
begin
  IdTelnet1.WriteLn(Value);
end;

procedure TTelnetThread.SetVars(fHost: String; fPort: Integer);
begin
  Host := fHost;
  Port := fPort;
end;

procedure TTelnetThread.Disconnect;
begin
  IdTelnet1.Disconnect();
end;



end.

Luckie 18. Aug 2009 10:06

Re: Prgramm hängt troz Tread.
 
Nebenbei bemerkt, das Ding nett sich Thread und nicht Tread.

Deltachaos 18. Aug 2009 10:08

Re: Prgramm hängt troz Thread.
 
ohhh,
xD

himitsu 18. Aug 2009 10:09

Re: Prgramm hängt troz Thread.
 
abgesehn davon ist der Thread so total sinnlos, da abgesehn vom dTelnet1.Connect(); alles außerhalb des Threads abläuft, welcher sich sogar nach dem Connect sofort wieder beendet.

und bezüglich dem String über SetVar ... Strings sind nicht threadsicher, also sollte man den String nicht einfach so in einen Thread hineinreichen.

Deltachaos 18. Aug 2009 10:12

Re: Prgramm hängt troz Thread.
 
ähm ja gut.
Die Frage ist erstmal wie erreiche ich es das bei einer Offenen Telnet Verbindung das Main Form nicht hängt

PS: Gibt es iwo ne Gutes Tut für Threads. Ich arbeite nich noch nich solange damit.


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

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