Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TThread - Sleep (https://www.delphipraxis.net/152808-tthread-sleep.html)

JoltinJoe 7. Jul 2010 19:50

TThread - Sleep
 
Ich hab nochmal eine Frage zu TThread:

Und zwar muss einen Thread in den Schlaf versetzen. Wenn ich Sleep() im Thread aufrufe schläft allerdings das ganze Programm ein...Ich möchte aber nur diesen einen Thread einschläfern. Hat jemand eine Idee ?

sirius 7. Jul 2010 19:53

AW: TThread - Sleep
 
Dann ist etwas mit dem Thread falsch.

mkinzler 7. Jul 2010 19:54

AW: TThread - Sleep
 
Zum Beispiel mit TTHread.SpinWait()

himitsu 7. Jul 2010 19:54

AW: TThread - Sleep
 
Sleep legt nur den einen Thread einschlafen, in Welchem es aufgerufen wird.

Wenn das gesamte Programm hängt, dann machst du was falsch.
- z.B. sleep in Synchronize aufrufen
- oder der Hauptthread "wartet" auf etwas, vom Thread, bzw. welches vom Thread noch gesperrt ist

JoltinJoe 7. Jul 2010 20:16

AW: TThread - Sleep
 
Zitat:

Zitat von himitsu (Beitrag 1034116)
Sleep legt nur den einen Thread einschlafen, in Welchem es aufgerufen wird.

Wenn das gesamte Programm hängt, dann machst du was falsch.
- z.B. sleep in Synchronize aufrufen
- oder der Hauptthread "wartet" auf etwas, vom Thread, bzw. welches vom Thread noch gesperrt ist

Okay deine erste Vermutung war auch meine erste, die kann ich ausschließen. Deine zweite Vermutung kann ich eigentlich auch ausschließen...Ich werde nochmal ein bisschen was testen und mich wieder melden ;)

ChrisE 8. Jul 2010 08:14

AW: TThread - Sleep
 
Hallo,

aber der Thread legt sich schon selber schlafen?

Also innerhalb seiner Execute-Methode merkt er irgendwann selber, dass er sich schlafen legen kann und ruft selber Sleep auf.
Delphi-Quellcode:
procedure TMeinThread.Exececute;
begin
  while not Terminated do
  begin
    // mach ganz viel
 
    if SchlafbedingungErfuellt then
      Sleep(1000);
  end;
//....
end;
Greez, Chris

xZise 8. Jul 2010 08:19

AW: TThread - Sleep
 
Moin,
wie startest du den Thread?

MfG
Fabian

JoltinJoe 8. Jul 2010 10:07

AW: TThread - Sleep
 
Zitat:

Zitat von ChrisE (Beitrag 1034154)
Hallo,

aber der Thread legt sich schon selber schlafen?

Also innerhalb seiner Execute-Methode merkt er irgendwann selber, dass er sich schlafen legen kann und ruft selber Sleep auf.
Delphi-Quellcode:
procedure TMeinThread.Exececute;
begin
  while not Terminated do
  begin
    // mach ganz viel
 
    if SchlafbedingungErfuellt then
      Sleep(1000);
  end;
//....
end;
Greez, Chris

Ja, genauso habe ich es !

Zitat:

Zitat von xZise (Beitrag 1034155)
Moin,
wie startest du den Thread?

MfG
Fabian

Habe jetzt keinen SourceCode zur Hand aber ich glaube es war "MyThread.Resume" .. werde heute Nachmittag das Problem nochmal genauer analysieren und ggf. eine neue Beschreibung posten :)

bYe

JoltinJoe 8. Jul 2010 17:47

AW: TThread - Sleep
 
Delphi-Quellcode:
//High Condition
procedure TSendThread.HighCondition;
begin
  FetchedCount:=FetchedCount+1;
end;

//Reset Condition
procedure TSendThread.ResetCondition;
begin
  FetchedCount:=0;
end;

procedure TSendThread.Execute;
begin
  while not Terminated do
  begin
    Synchronize(HighCondition);
    if FetchedCount>ConditionLimit then
      begin
        Sleep(Delay);
        Synchronize(ResetCondition);
      end;
      ....
      MEINE_ANDEREN_PROCEDUREN
      ....
  end;
end;
FetchedCount und ConditionLimit sind globale Variablen. FetchedCount wird nur im Synchronize beschrieben, ConditionLimit wird nur gelesen!

Grundlage: Ich habe immer 100 Threads. Wenn ich das Limit auf 50 setze dann sollen 50 Threads MEINE_ANDEREN_PROCEDUREN ausführen und 50 sollen erstmal schlafen und dann MEINE_ANDEREN_PROCEDUREN ausführen !

xZise 8. Jul 2010 18:04

AW: TThread - Sleep
 
Wann wird denn CheckCondition aufgerufen? Eventuell ist dort synchronisiert.

Und was macht der Mainthread, nachdem du es laufen lässt?

MfG
Fabian


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 1 von 3  1 23      

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