Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Fr 16.05.08 14:21 
Ich habe ein DLL in einen anderen Prozess injedcted
wenn ich aus dieser heraus das Datum über Now() bestimmen will, erhalte ich falsche Ergebnisse (sie liegen ca. +-4 minuten und bei erneuten aufruf von now erhalte ich die ganeu gleichen werte)
nach einigerzeit erhöht sich der wert und bleibt dann wieder dort für ne weile

wie kann das sein?

mir ist auch aufgefallen: aus einem thread der TThread Klasse heraus stimmen die Werte...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 16.05.08 14:57 
Zeig mal, wie Du den Zeitwert von Now zwischen deinen Prozessen überträgst ... Hab da so ne Vermutung ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Fr 16.05.08 15:35 
hab jetzt mal alles durchgesucht und den "fehler" gefunden
ich hab einfach das was now() macht (und die unteraufrufe) selbst geschrieben mit debugausgaben
hat nix mit zeitwerten zu tun
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
function Now3: String;
var
  SystemTime: TSystemTime;
  td:TDateTime;
  tmpFloat,tmp:Extended;
const dday:Extended=60*60*24;
begin
  GetLocalTime(SystemTime);
  Result := Inttostr(systemTime.wHour)+':'+inttostr(systemtime.wMinute)+':'+inttostr(systemtime.wSecond); //ist korrekt
  with SystemTime do begin
    Ausgabe(inttostr(wHour)+':'+inttostr(wMinute)+':'+inttostr(wSecond),cOK); //korrekt
    td:=EncodeDate(wYear, wMonth, wDay);
    td:=td+wHour /24;
    td:=td+wMinute/(24*60);
    tmpFloat:=wSecond/(24*60*60);
    tmp:=td;
    Ausgabe(FloatToStr(tmp),cOK); //stimmt immer noch (Hier ist Pos 1)
    tmp:=tmp*dday;
    Ausgabe(FloatToStr(tmp)+' aaa '+inttostr(wSecond),cOK); //ab hier
    td:=tmp+10; //eindeutig oder?
    tmp:=tmp+wSecond;
    Ausgabe(FloatToStr(tmp),cOK); //aber tmp ist gleich
    tmp:=tmp/dday;
    td:=td/dday;
    Ausgabe(FloatToStr(td)+' '+Floattostr(tmp),cOK); //gleicher wert wie an pos 1
  end;
    Result:=DateTimeToStr(td);
end;


Dadurch fallen die Sekunden, zum Teil auch die minuten untern tisch....

asm:
ausblenden Quelltext
1:
2:
172DCEF3                     DB6D D0                     FLD TBYTE PTR [EBP-30]
172DCEF6                     D805 04D02D17               FADD DWORD PTR [172DD004] //der inhalt ist 10.0000 aber es passiert gar nix (ollydbg)

entspricht
ausblenden Delphi-Quelltext
1:
    td:=tmp+10;					


ich versteh das nicht...

EDIT: Ich hab den Fehler jetzt umgangen indem ich ne eigne zeit-unit geschrieben hab die auf nem cardinal typ basiert (sekunden seit tag x)

einzige sache: ich hab noch teile wie das hier:

ausblenden Delphi-Quelltext
1:
2:
m:=s div 60;
s:=s mod 60;


wie war das da mit geschwindigkeit von div und modulo?
bin ich statt dem div vl mit trunc() schneller? oder ist div schneller?