Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi delay bzw. sleep (https://www.delphipraxis.net/124610-delay-bzw-sleep.html)

stoxx 21. Nov 2008 21:11


delay bzw. sleep
 
die Version von Luckie ist nicht ganz perfekt, bzw. geht die CPU Last dann auf 100 Prozent
http://www.delphipraxis.net/viewtopic.php?t=131

und diese Funktion von negaH hat ein paar schwer zu findende Macken, in Kombination mit anderen Threads und Sockets ...
http://www.delphipraxis.net/internal...elay+revisited



ab und an ... , wenn man es nicht vermeiden kann, mit sleep zu arbeiten, verwenden wir jetzt wieder die alte Version :-)

Delphi-Quellcode:
procedure SleepX(Milliseconds : Integer);
var
  TC: DWORD;
begin
  TC := GetTickCount;
  repeat
    if application.Terminated then
       exit;
    Application.ProcessMessages;
    sleep(1);
  until ((GetTickCount-TC) > Milliseconds);
end;

SubData 21. Nov 2008 21:18

Re: delay bzw. sleep
 
Ich verwende die Version von Hagen in einer Server-Anwendung und konnte bisher kein fehlerhaftes Verhalten feststellen...
Was genau ist denn daran fehlerhaft?

Sir Rufo 21. Nov 2008 21:21

Re: delay bzw. sleep
 
hi,

Delphi-Quellcode:
procedure SleepX(Milliseconds : Integer);
var
  TC: DWORD;
begin
  TC := GetTickCount;
  repeat
    if application.Terminated then
       exit;
    Application.ProcessMessages; // <--- non-thread
    sleep(1);
  until ((GetTickCount-TC) > Milliseconds);
end;
Kannst du mir mal erklären wofür du in einer Non-Thread-Umgebung ein sleep brauchst? :gruebel:

cu

Oliver

Namenloser 21. Nov 2008 21:25

Re: delay bzw. sleep
 
Damit die CPU-Auslastung nicht zu hoch wird, nehme ich an.

stoxx 21. Nov 2008 21:29

Re: delay bzw. sleep
 
Zitat:

Zitat von SubData
Ich verwende die Version von Hagen in einer Server-Anwendung und konnte bisher kein fehlerhaftes Verhalten feststellen...
Was genau ist denn daran fehlerhaft?

Gute Frage, wir haben das nicht weiter untersucht, obs am Socket oder an den Threads lag, bzw. war QS_ALLINPUT wohl nicht ganz ausreichend, wenn aus einem Thread Events synchroniziert per Synchronize geschickt wurden. Ich bin mir jetzt nicht sicher, da müsste ich nochmal drüber nachdenken und debuggen, ob MsgWaitForMultipleObjects zu wenig oder zuviel abgebrochen hat.

Zumindest wurde Code, der eigentlich überhaupt nicht parallel hätte ausgeführt werden können, dann auch einmal doch doppelt ausgeführt. Der Quelltext benötigt eine sauberes warten der Aktionen in Joblisten, so dass wir es nicht gemerkt haben.
Wir haben aber ein paar Showmessages als mißbrauchte Asserts in unserem Quelltext, die in Fehlerfällen auf einmal doppelt und dreifach hintereinander erschienen, obwohl die erste noch gar nicht bestätigt wurde ...

stoxx 21. Nov 2008 21:30

Re: delay bzw. sleep
 
Zitat:

Zitat von NamenLozer
Damit die CPU-Auslastung nicht zu hoch wird, nehme ich an.

korrekt :-)

SubData 21. Nov 2008 21:30

Re: delay bzw. sleep
 
Ahh... So ist das :)
Dafür ist die Funktion ja genau da, dass sie bei einem Event abbricht ;-)

stoxx 21. Nov 2008 21:32

Re: delay bzw. sleep
 
Zitat:

Zitat von SubData
Ahh... So ist das :)
Dafür ist die Funktion ja genau da, dass sie bei einem Event abbricht ;-)

ja, aber blöderweise darf die wohl jeder Thread abbrechen ..
und synchronizierte Aufrufe von Thread funken dann auf einmal unsynchroniziert in den Mainthread rein ..
irgendwie so muss es gewesen sein :-)

Luckie 22. Nov 2008 00:54

Re: delay bzw. sleep
 
Ich verstehe, ehrlich gesagt, immer noch nicht, warum du eine Sleep-Funktion brauchst, wenn du Threads verwendest.

Und das Argument mit der CPU Auslastung ist Müll. So lange der Thread Rechenzeit abgibt, wenn andere Ressourcen sie brauchen ist das doch in Ordnung. Und das sollte der Fall sein, wenn du die Priorität nicht hochgesetzt hast. Weil dafür habe ich die CPU gekauft, zum Rechnen und nicht um ungenutzt Strom zu verbrauchen. Ich kaufe mir doch auch kein 300 PS Auto, um dann im ersten Gang über die Autobahn zu kriechen.

stoxx 22. Nov 2008 06:00

Re: delay bzw. sleep
 
Hi Luckie .. glückwunsch erstmal :-)

das sleepx sollte nur eine Info sein, wir haben nun auch umgestellt. Es gab gewissen Momente, wo man mit einem Fremdserver (über Socket) nicht kommunizieren durfte, weil sonst in der Kommunikation Fehler entstanden waren.
Wir haben mittlerweile komplett umgestellt auf Joblisten,... wenn also für einen kurzen Moment "besetzt" ist, wird einfach bei der Freigabe die Joblist abgearbeitet.
Somit erübrigt sich sleepx .. da hast Du schon Recht ..


Zitat:

Ich kaufe mir doch auch kein 300 PS Auto, um dann im ersten Gang über die Autobahn zu kriechen
Also ich kaufe mir ein 300 PS Auto um vor allen Dingen in einer ruhigen Kulisse von A nach B zu fahren :-) Und um Leistung zu haben, wenn ich sie brauche.
Natürlich darf man mit schnellen Autos auch 50 in der Stadt fahren, auch wenn der Motor da nicht ausgelastet ist ;-)


.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 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