AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Time Funktion Probleme auf Windows Server 2003
Thema durchsuchen
Ansicht
Themen-Optionen

Time Funktion Probleme auf Windows Server 2003

Ein Thema von surfer007 · begonnen am 29. Jan 2010 · letzter Beitrag vom 10. Feb 2010
Antwort Antwort
surfer007

Registriert seit: 17. Jan 2010
51 Beiträge
 
Delphi 7 Professional
 
#1

Time Funktion Probleme auf Windows Server 2003

  Alt 29. Jan 2010, 18:15
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Time Funktion Probleme auf Windows Server 2003

  Alt 29. Jan 2010, 18:22
Application.ProcessMessages; ist unnötig wenn es eh in einem Timer abläuft.

Wenn schon mach ein

LabelClock.Update zur GUI-Aktualisierung.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
surfer007

Registriert seit: 17. Jan 2010
51 Beiträge
 
Delphi 7 Professional
 
#3

Re: Time Funktion Probleme auf Windows Server 2003

  Alt 29. Jan 2010, 20:25
Ok, die Frage ist aber immer noch warum zeigt das Label extreme Zeitsprünge an?
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.
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#4

Re: Time Funktion Probleme auf Windows Server 2003

  Alt 29. Jan 2010, 22:09
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
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
surfer007

Registriert seit: 17. Jan 2010
51 Beiträge
 
Delphi 7 Professional
 
#5

Re: Time Funktion Probleme auf Windows Server 2003

  Alt 3. Feb 2010, 15:21
Hallo Astat,

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

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


Grüsse,
surfer007
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#6

Re: Time Funktion Probleme auf Windows Server 2003

  Alt 3. Feb 2010, 15:35
Zitat von surfer007:
Hallo Astat,

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

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


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
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
surfer007

Registriert seit: 17. Jan 2010
51 Beiträge
 
Delphi 7 Professional
 
#7

Re: Time Funktion Probleme auf Windows Server 2003

  Alt 10. Feb 2010, 21:59
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
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#8

Re: Time Funktion Probleme auf Windows Server 2003

  Alt 10. Feb 2010, 23:51
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
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:58 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