Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TThread und Sleep (https://www.delphipraxis.net/158031-tthread-und-sleep.html)

henryhux 2. Feb 2011 22:33

TThread und Sleep
 
Hey, ich glaube mein erster Post hier 8-) EDIT : Nicht ganz :D
Und zwar wollte ich mal nachfragen, ob es normal ist, dass sleep() in einem Thread ausgeführt das ganze Programm freezed?
Dachte immer das würde nicht passieren.
Naja hier ein kleines Beispiel:

Delphi-Quellcode:
  TThread1 = class(TThread)
    procedure execute; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TThread1.execute;
begin
  Sleep(5000);
end;

procedure TForm1.btn1Click(Sender: TObject);
var T : TThread1;
begin
  T := TThread1.Create;
  T.Execute;
end;
Was könnte ich als Alternative benutzen?

Lg

Matze 2. Feb 2011 22:40

AW: TThread und Sleep
 
Hallo,

meine Antwort bezieht sich nicht speziell auf Threads, da ich nicht weiß, wie sich das dort verhält. In einer "normalen" Anwendung kannst du anstelle von Sleep die Funktion DelayDelay verwenden. Diese verhindert ein Einfrieren während der Wartezeit.

henryhux 2. Feb 2011 22:42

AW: TThread und Sleep
 
Danke, benutze ich üblicherweise außerhalb von Threads auch.
Nur dachte ich Application.Processmessages sollte in Threads vermieden werden?

Lg

Bummi 2. Feb 2011 22:53

AW: TThread und Sleep
 
die Zeile
Delphi-Quellcode:
  T.Execute;
gehört da nicht rein.
Der Thread selbst läuft ins Execute, wenn Du es aus der Haupanwendung aufrufst steht diese....

Beispiel:
Delphi-Quellcode:
procedure TThread1.execute;
begin
  Showmessage('vor Sleep');
  Sleep(15000);
  Showmessage('nach Sleep');
end;

procedure TForm1.button1Click(Sender: TObject);
var T : TThread1;
begin
  T := TThread1.Create(false);

end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  Showmessage('Hallo')
end;

Thom 2. Feb 2011 22:57

AW: TThread und Sleep
 
Ok. Zu spät... :wink:

Aber ist es weise, ShowMessage aus dem Thread-Kontext heraus aufzurufen!? :gruebel:
Wäre da nicht ein Synchronize-Aufruf angebrachter?

henryhux 2. Feb 2011 22:59

AW: TThread und Sleep
 
Ok, das Beispiel klappt, danke.
Doch was für ein Parameter hast du der create Methode mitgegeben?

Lg

Luckie 2. Feb 2011 23:00

AW: TThread und Sleep
 
Zitat:

Zitat von Bummi (Beitrag 1079197)
Beispiel:
[delphi]
procedure TThread1.execute;
begin
Showmessage('vor Sleep');
Sleep(15000);
Showmessage('nach Sleep');
end;

Autsch. Die VCL ist nicht threadsafe. Das ShowMessage sollte also eine Exception auslösen. Wenn dann bitte eine MessageBox.

Luckie 2. Feb 2011 23:01

AW: TThread und Sleep
 
Zitat:

Zitat von henryhux (Beitrag 1079201)
Doch was für ein Parameter hast du der create Methode mitgegeben?

Einfach mal mutig F1 drücken.

Bummi 2. Feb 2011 23:04

AW: TThread und Sleep
 
Zitat:

Autsch. Die VCL ist nicht threadsafe. Das ShowMessage sollte also eine Exception auslösen. Wenn dann bitte eine MessageBox.
ich weiß.... ich wollte Ihm nur schnell zeigen dass das Execute ausgeführt wird ....

henryhux 2. Feb 2011 23:06

AW: TThread und Sleep
 
Ok, danke.
Der Fehler war dann wohl, das Execute nochmal auszuführen.

Vielen Danke =)

Lg


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz