Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Befehl "Now" / Werte in Zukunft??? (https://www.delphipraxis.net/69431-befehl-now-werte-zukunft.html)

skyware 15. Mai 2006 08:44


Befehl "Now" / Werte in Zukunft???
 
Hallo zusammen,

In einer Multithread Server Applikation scheint es zu passieren das der Befehl "Now" einen Wert zurückliefert der in der Zukunft liegt..?!? :roll:
Manchmal ein paar Stunden-, manchmal auch gar Monate in der Zukunft...

Hat jemand schon ähnliche Erfahrungen gemacht?
Kann es sein das der Befehl "Now" nicht thread save ist??

Ich versteh die Welt nicht mehr... :wall:

himitsu 15. Mai 2006 11:50

Re: Befehl "Now" / Werte in Zukunft???
 
Bist du sicher, daß der Fehler bei Now liegt?
Wüßte jedenfalls nicht, was daran nicht unbedingt Threadsicher sein sollte ... abgesehn von GetLocalTime, aber da kann ich mir keinen Grund vorstellen, warum dort die Sprünge so groß ausfallen sollten :gruebel:

Delphi-Quellcode:
function Now: TDateTime;
var
  SystemTime: TSystemTime;
begin
  GetLocalTime(SystemTime);
  with SystemTime do
    Result := EncodeDate(wYear, wMonth, wDay) +
      EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
end;

mbamler 15. Mai 2006 11:57

Re: Befehl "Now" / Werte in Zukunft???
 
Zitat:

Zitat von himitsu
Bist du sicher, daß der Fehler bei Now liegt?
Wüßte jedenfalls nicht, was daran nicht unbedingt Threadsicher sein sollte ... abgesehn von GetLocalTime, aber da kann ich mir keinen Grund vorstellen, warum dort die Sprünge so groß ausfallen sollten :gruebel:

Delphi-Quellcode:
function Now: TDateTime;
var
  SystemTime: TSystemTime;
begin
  GetLocalTime(SystemTime);
  with SystemTime do
    Result := EncodeDate(wYear, wMonth, wDay) +
      EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
end;


Was bei älteren Delphi Versionen NICHT ging war sowas wie:

wert := now + 1; //für morgen

dabei bekam man gegebenenfalls falsche Werte - man konnte sich helfen mit:

wert1 := now;
wert2 := wert1 + 1;

vielleicht hängt dein Problem damit zusammen ?!?!?

Gruß
Matthias

Olli 15. Mai 2006 12:02

Re: Befehl "Now" / Werte in Zukunft???
 
Ich gehe davon aus, daß irgendjemand Now() aufruft und ein anderer das Ergebnis liest - korrekt? Das Lesen/Schreiben könntest du mit einer Critical Section schützen. So umgehst du mögliche Probleme.

Übrigens, wenn Now() Werte einfüllt (ich habe keine Doku zur Hand) die mehr als 32bit groß sind, so dürfte ebendies der Auslöser des Problems sein.

Wenn hingegen jeder Thread selber Now() ausführt, hängt es von der Implementation von Now() ab, ob es threadsicher ist.


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