AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TThread - Sleep

Ein Thema von JoltinJoe · begonnen am 7. Jul 2010 · letzter Beitrag vom 17. Dez 2010
Antwort Antwort
Seite 1 von 3  1 23      
JoltinJoe

Registriert seit: 26. Jun 2010
29 Beiträge
 
Delphi 7 Enterprise
 
#1

TThread - Sleep

  Alt 7. Jul 2010, 19:50
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: TThread - Sleep

  Alt 7. Jul 2010, 19:53
Dann ist etwas mit dem Thread falsch.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TThread - Sleep

  Alt 7. Jul 2010, 19:54
Zum Beispiel mit TTHread.SpinWait()
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: TThread - Sleep

  Alt 7. Jul 2010, 19:54
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
$2B or not $2B
  Mit Zitat antworten Zitat
JoltinJoe

Registriert seit: 26. Jun 2010
29 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: TThread - Sleep

  Alt 7. Jul 2010, 20:16
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
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: TThread - Sleep

  Alt 8. Jul 2010, 08:14
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
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

AW: TThread - Sleep

  Alt 8. Jul 2010, 08:19
Moin,
wie startest du den Thread?

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
JoltinJoe

Registriert seit: 26. Jun 2010
29 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: TThread - Sleep

  Alt 8. Jul 2010, 10:07
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 !

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
  Mit Zitat antworten Zitat
JoltinJoe

Registriert seit: 26. Jun 2010
29 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: TThread - Sleep

  Alt 8. Jul 2010, 17:47
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 !

Geändert von JoltinJoe ( 8. Jul 2010 um 18:19 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

AW: TThread - Sleep

  Alt 8. Jul 2010, 18:04
Wann wird denn CheckCondition aufgerufen? Eventuell ist dort synchronisiert.

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

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr.
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