AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Befehl "Now" / Werte in Zukunft???
Thema durchsuchen
Ansicht
Themen-Optionen

Befehl "Now" / Werte in Zukunft???

Ein Thema von skyware · begonnen am 15. Mai 2006 · letzter Beitrag vom 15. Mai 2006
Antwort Antwort
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#1

Befehl "Now" / Werte in Zukunft???

  Alt 15. Mai 2006, 09:44
Hallo zusammen,

In einer Multithread Server Applikation scheint es zu passieren das der Befehl "Now" einen Wert zurückliefert der in der Zukunft liegt..?!?
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 15. Mai 2006, 12:50
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

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;
$2B or not $2B
  Mit Zitat antworten Zitat
mbamler

Registriert seit: 19. Mai 2005
Ort: Hamburg
118 Beiträge
 
Delphi 7 Architect
 
#3

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

  Alt 15. Mai 2006, 12:57
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

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
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

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

  Alt 15. Mai 2006, 13:02
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.
  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 05:26 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