![]() |
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 ? |
AW: TThread - Sleep
Dann ist etwas mit dem Thread falsch.
|
AW: TThread - Sleep
Zum Beispiel mit TTHread.SpinWait()
|
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 |
AW: TThread - Sleep
Zitat:
|
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:
Greez, Chris
procedure TMeinThread.Exececute;
begin while not Terminated do begin // mach ganz viel if SchlafbedingungErfuellt then Sleep(1000); end; //.... end; |
AW: TThread - Sleep
Moin,
wie startest du den Thread? MfG Fabian |
AW: TThread - Sleep
Zitat:
Zitat:
bYe |
AW: TThread - Sleep
Delphi-Quellcode:
FetchedCount und ConditionLimit sind globale Variablen. FetchedCount wird nur im Synchronize beschrieben, ConditionLimit wird nur gelesen!
//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; 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 ! |
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. |
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