![]() |
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:
Der Tread:
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.
Delphi-Quellcode:
Nunja das Problem ist klar das Das Programm troz eigenem tread hängt. Hat wer ne Idee?
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; [edit=Luckie]Rechtschreibfehler im Titel korrigiert. Mfg, Luckie[/edit] [edit=mkinzler]Rechtschreibfehler konsequent im Titel korrigiert :zwinker: Mfg, mkinzler[/edit] |
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...
|
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:
Ne idee?
procedure TTelnetThread.execute;
begin IdTelnet1.Host := Host; IdTelnet1.Port := Port; try IdTelnet1.Connect(); // IsConnect := True; except // IsConnect := False; end; end; Verbindung kommt aber beim Server an ;) Wenn ich dann Disconnecte dann läst sich das Form auch wieder bewegen |
Re: Prgramm hängt troz Tread.
Zeig mal kompletten Code.
|
Re: Prgramm hängt troz Tread.
Zitat:
*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. |
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:
Der Thread:
procedure TForm1.Button1Click(Sender: TObject);
begin Telnet := TTelnetThread.create; Telnet.SetVars('xtain.net', 3118); Telnet.Resume; //Telnet.Disconnect; //Telnet.Resume; end;
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. |
Re: Prgramm hängt troz Tread.
Nebenbei bemerkt, das Ding nett sich Thread und nicht Tread.
|
Re: Prgramm hängt troz Thread.
ohhh,
xD |
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. |
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 10:01 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