PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : settimeofday & unsigned long long int



7.e.Q
02-06-2005, 15:40
Moin Leute,

ich soll die Systemzeit per settimeofday setzen, bekomme dafür einen Timestamp als unsigned long long int. Da settimeofday, bzw. die timeval Structure nur long als Datentyp akzeptiert und das Umcasten zu schrägen Werten führt, wollte ich mal wissen, wie ich aus dem besagten unsigned long long int einen long int mache, den die timeval struct und damit settimeofday verträgt. Gibts da 'nen Weg?

Danke!

Gruß,
Hendrik

anda_skoa
03-06-2005, 11:11
Ansich ist der Wert in timeval vom Typ time_t

Auf Systemen die dem Überlauf 2038 entgehen wollen dürfte der bereits auf 64 Bit definiert sein.

Aus welcher Funktion bekommst du einen Timestamp der nicht im korrekten Typ ist?
D.h. wenn die korrekterweise time_t liefern würden, könntest du einfach zuweisen.

Ciao,
_

7.e.Q
09-06-2005, 14:49
Ich bekomme den Timestamp glaube ich aus einer GetSystemTime von einem Windows-Client. Wie gesagt, glaube ich, weil ich den Einblick in den Code nicht habe. Aber ich habe es inzwischen gelöst. Ich errechne aus dem erhaltenen Timestamp ein Datum bis Mikrosekunden genau und aus diesem errechneten Datum generiere ich eine struct timeval. Die ist ja auch auf µSec genau und lässt sich mit settimeofday verwenden. :eek:

Ist zwar umständlich, aber so funktionierts. :rolleyes:

anda_skoa
09-06-2005, 15:07
Ich bekomme den Timestamp glaube ich aus einer GetSystemTime von einem Windows-Client.

Ah, dann ist klar.
Die meisten Windows Entwickler halten sich nicht an definierte Typen.

Die fallen dann immer gehörig auf die Schnauze wenn sie zb von 32Bt auf 64 Bit wechseln :D

Ciao,
_

7.e.Q
13-06-2005, 12:07
So'n Ärger... dann bin ich wohl derjenige, der mit dem Entwickler-Schrott meiner Winzigweich-Kollegen "auf die Schnauze" gefallen ist. *grmpf*Aber wo hält sich Windows schonmal an irgendwelche Vorgaben? Bestes Beispiel ist da ja der Internet Explorer, der sich in keinster Weise an CSS Standards hält... aber das ist jetzt glaubich zu OffTopic.

anda_skoa
13-06-2005, 16:06
Das ist in den wenigsten Fällen Schuld der Windows API, denn die ist zwar manchmal extra inkompatibel zu POSIX, aber deswegen noch lange nicht mit falschen Typen versehen.

Meistens sind es ignorante Entwickler, für die so Annahmen gelten wie:
- sizeof(int) == sizeof(void*) (Pointer passt in einen int)
- size_t == long == int
- long == int
- Endianess ist immer little endian

Die WinAPI hat meistens die korrekten Typen, also zB time_t, aber die Entwickler nehmen frischfröhlich uint

Ciao,
_

7.e.Q
14-06-2005, 12:58
Okay, ich geh mal den Kollegen verhauen eben... ;)