Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Time Funktion Probleme auf Windows Server 2003 (https://www.delphipraxis.net/146934-time-funktion-probleme-auf-windows-server-2003-a.html)

surfer007 29. Jan 2010 17:15


Time Funktion Probleme auf Windows Server 2003
 
Hallo,

ich zeige die aktuelle Uhrzeit über einen Timer (100ms) an:

Delphi-Quellcode:
LabelClock.Caption := TimeToStr(Time);
Application.ProcessMessages;
Nun hat ein Kunde berichtet das die Zeit alle paar Sekunden wild umher springt, also mal eine Stunde mehr, 15 Minuten weniger, usw. Der Kunde benutzt Windows Server 2003. Auf XP usw. funktioniert es wie es soll, nur auf Windows Server "spinnt" die Zeitausgabe im Vergleich zur Zeit die in der Taskleiste unten rechts angezeigt wird.

Woran kann das liegen?

Bernhard Geyer 29. Jan 2010 17:22

Re: Time Funktion Probleme auf Windows Server 2003
 
Application.ProcessMessages; ist unnötig wenn es eh in einem Timer abläuft.

Wenn schon mach ein

Delphi-Quellcode:
LabelClock.Update
zur GUI-Aktualisierung.

surfer007 29. Jan 2010 19:25

Re: Time Funktion Probleme auf Windows Server 2003
 
Ok, die Frage ist aber immer noch warum zeigt das Label extreme Zeitsprünge an?
Delphi-Quellcode:
LabelClock.Caption := TimeToStr(Time);
da kann man eigentlich wenig falsch machen?!

Bsp: es ist 15:00:00 Uhr. Das Label zeigt für ein paar Sekunden die richtige Zeit,
dann auf einmal z.B. 14:15:23, dann 16:10:23 usw., slso total wirre Zeiten.
:gruebel:

Astat 29. Jan 2010 21:09

Re: Time Funktion Probleme auf Windows Server 2003
 
Zitat:

Zitat von surfer007
Ok, die Frage ist aber immer noch warum zeigt das Label extreme Zeitsprünge an?

Hallo surfer007, unter Server Betriebssystemen erfolgt der ThreadPriority Boost für die Hintergrundprozesse, und nicht
für Prozesse die im "Vordergrund" laufen. Dadurch kann es zu solchen Verzögerungen kommen.
Versuch mal deinem Timer mehr Prozesspriorität zuzuweisen. Danach sollte das Problem nicht mehr so krass sein.

lg. Astat

surfer007 3. Feb 2010 14:21

Re: Time Funktion Probleme auf Windows Server 2003
 
Hallo Astat,

die ganze Anwendung läuft schon mit Priorität "HIGH", das wird bei Form1.OnCreate gesetzt.

Delphi-Quellcode:
SetPriorityClass(GetCurrentProcess,DWORD(HIGH_PRIORITY_CLASS));
Wie kann ich nur dem Timer mehr Prozesspriorität zuzuweisen?
:gruebel:

Grüsse,
surfer007

Astat 3. Feb 2010 14:35

Re: Time Funktion Probleme auf Windows Server 2003
 
Zitat:

Zitat von surfer007
Hallo Astat,

die ganze Anwendung läuft schon mit Priorität "HIGH", das wird bei Form1.OnCreate gesetzt.

Delphi-Quellcode:
SetPriorityClass(GetCurrentProcess,DWORD(HIGH_PRIORITY_CLASS));
Wie kann ich nur dem Timer mehr Prozesspriorität zuzuweisen?
:gruebel:

Grüsse,
surfer007

Hallo surfer007, der Priority Boost ist trotzdem noch auf Low.

Test mal folgendes, wenn meine Vermutung richtig, dann sollte das Problem beseitigt sein.
Danach suchen wir auch für die Serverumgebung eine Lösung.

1. Systemsteuerung -> System -> Reiter -> Erweitert -> Systemleistung -> Anwendung auswählen
2. Wenns funktioniert, den verwendeten Timer in einen mmTimer mit kritischer Priorität umcoden
3. Systemeinstellungen wieder rückgängig machen.

Versuchs mal.

lg. Astat

surfer007 10. Feb 2010 20:59

Re: Time Funktion Probleme auf Windows Server 2003
 
Hallo Astat,

danke für den Tip! Ich kann das leider nicht testen da ich selbst kein Server System habe. Ich gebe das mal an den Kunden weiter, mal sehen ob es besser wird wenn die Systemleistungsoptionen auf "Anwendung" steht.

Grüsse,
Surfer007

Astat 10. Feb 2010 22:51

Re: Time Funktion Probleme auf Windows Server 2003
 
Zitat:

Zitat von surfer007
..Ich gebe das mal an den Kunden weiter, mal sehen ob es besser wird wenn die Systemleistungsoptionen auf "Anwendung" steht.

Hallo surfer007, dies war nur als Möglichkeit gedacht, um herauszufinden ob das Problem am Priority Boost liegt.
Bitte nicht dem Kunden empfehlen seine Serverperformance desswegen zu verschlechtern.
Auf Serversystemen laufen die Hintergrundprozesse immer mit höherem Boost als die Vordergrundprozesse eines eingeloggten Users.

Überlegen wir mal, wann tritt ein solches Problem auf:

1. Server ausgelastet, und Vordergrundanwendungen bekommen weniger Rechenzeit zugeteilt.
2. Applikation ausgelastet, und Neuzeichnung der VCL Controls, und Messagequeue werden verzögert abgearbeitet.

Tip:

Im Quellcode nach Sleep und Processmessages suchen.
Werden welche gefunden, folgendes bedenken.

Programme ohne Threads, aber mit Messagequeue, sollten keine Sleeps enthalten.

Wenn Processmessages vorhanden, sollte man sich eine möglichkeit suchen, betroffene Codeteile durch Threads zu ersetzen.

In Threads nur Sleep zur Freigabe von übriger Rechenzeit verwenden, niemals zur Synchronisation verwenden.

lg. Astat


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