Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
goooofy
Anmeldungsdatum: 12.09.2005 Beiträge: 69
|
Verfasst am: 16.08.2010, 11:52 Titel: TIMER unter XP falsch / Genauere Uhrzeit erhalten |
|
|
Hallo,
ich suche nach einer Möglichkeit, die aktuelle Systemzeit, mindestens zehntelsekunden-genau (noch besser hundertstel-genau) zu erhalten. Alle mir bekannten Funktionen liefern nur auf ganze Sekunden.
Das ganze sollte OHNE die Funktion TIMER funktionieren, da TIMER bei mir seltsamerweise auf mehreren XP-Systemem extrem zu "langsam" läuft und mir nach tatsächlichen vergangenen 60 Sekunden nur etwa 47 Sekunden in der berechneten Differenz ausgibt. Vielleicht hat ja noch jemand dafür eine Erklärung. Auf einem System (auch XP!) läuft TIMER absolut genau wie erwartet, auf dem anderen absolut ungenau. Schon seltsam....
Vielen Dank! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 16.08.2010, 12:07 Titel: Re: TIMER unter XP falsch / Genauere Uhrzeit erhalten |
|
|
Hallo!
goooofy hat Folgendes geschrieben: | da TIMER bei mir seltsamerweise auf mehreren XP-Systemem extrem zu "langsam" läuft und mir nach tatsächlichen vergangenen 60 Sekunden nur etwa 47 Sekunden in der berechneten Differenz ausgibt. [...] Auf einem System (auch XP!) läuft TIMER absolut genau wie erwartet, [...] |
Du könntest mal die Einstellung "Kompatible Timeremulation" ausprobieren. Bei mir funktioniert es unter XP sowohl mit als auch ohne diese Einstellung wie erwartet, aber vielleicht ändert sie bei dir ja etwas:
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
goooofy
Anmeldungsdatum: 12.09.2005 Beiträge: 69
|
Verfasst am: 16.08.2010, 13:16 Titel: |
|
|
Danke, aber diese Option gibt es doch nur bei 16-bit EXEn, oder? Bei meiner 32-bit exe bzw. deren Verknüpfung konnte ich die Optione jedenfalls nicht finden.
Aber das TIMER-Problem ist für mich erstmal auch nur zweitrangig. Wenn jemand weiß, wie ich die zehntelsekunden-genaue Systemzeit bekokmme, wäre das toll! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 16.08.2010, 13:53 Titel: |
|
|
hm. gettimeofday() wäre das, was du suchst unter linux und allen posix-kompatiblen systemen...
weiß aber nicht, obs auch unter windows geht...
aber das ist doch eigentlich ein bug von FB, ne? _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
goooofy
Anmeldungsdatum: 12.09.2005 Beiträge: 69
|
Verfasst am: 16.08.2010, 14:02 Titel: |
|
|
Naja ist insofern ein Bug, als es nicht zuverlässig unter allen Systemen funktioniert und TIMER damit praktisch unbrauchbar ist, es sei denn, man will das Programm nur auf einem einzigen Rechner laufen lassen bei dem es eben funktioniert.
GetTickCount wäre wohl das passende Gegenstück für Windows, allerdings gibt mir das ja auch nur die Millisekunden seit Systemstart zurück. Ich bräucht aber die aktuelle Zeit, sowas wie 12:32:02:99 (99 Hunderstelsekunden) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.08.2010, 15:11 Titel: |
|
|
Ich hab jetzt nicht genau recherchiert, aber die tatsächliche Systemzeit wird meines Wissens nach nicht so extrem genau gespeichert. Die Hard- und Software-Timer dagegen sind ziemlich genau. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
goooofy
Anmeldungsdatum: 12.09.2005 Beiträge: 69
|
Verfasst am: 16.08.2010, 16:57 Titel: |
|
|
Die GetSystemTime aus der kernel32 soll eigentlich die Zeit millisekundengenau wiedergeben können. Folgender Code gibt allerdings nur "00:00:00:000" zurück. Keine Ahnung weshalb. Hat jemand eine Idee, wo der Fehler steckt bzw. kennt jemand eine alternative Möglichkeit, die Systemzeit genauer als auf die ganze Sekunde zu erhalten?
Code: | #INCLUDE "vbcompat.bi"
TYPE SYSTEMTIME
wYear As INTEGER
wMonth As INTEGER
wDayOfWeek As INTEGER
wDay As INTEGER
wHour As INTEGER
wMinute As INTEGER
wSecond As INTEGER
wMilliseconds As INTEGER
End TYPE
DECLARE Sub GetSystemTime Lib "kernel32" alias "GetSystemTime" (st As SYSTEMTIME)
DECLARE FUNCTION FORMATSYSTEMTIME() AS STRING
PRINT FORMATSYSTEMTIME
SLEEP
END
Function FormatSystemTime As String
Dim st As SYSTEMTIME
GetSystemTime st
WITH st
FORMATSYSTEMTIME = Format(.wHour, "00") + ":" + Format(.wMinute, "00") + ":" + FORMAT(.wSecond, "00") + ":" + Format(.wMilliseconds, "000")
END With
End FUNCTION |
|
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 957 Wohnort: Austria
|
Verfasst am: 16.08.2010, 18:47 Titel: |
|
|
Ganz einfach:
- Die SYSTEMTIME Struktur ist falsch definiert.
Alle Member sind laut offizieller Dokumentation von Microsoft (siehe http://msdn.microsoft.com/en-us/library/ms724950) als WORD deklariert - somit 16 Bytes lang. Du verwendest hingegen einen Integer (32-Bit).
Lösung: (U)Short statt Integer [ob Short oder UShort ist in diesem Fall egal, da die Zahlenwerte sowieso nie größer als 999 werden]
- Der GetSystemTime Funktionsprototyp ist falsch definiert.
Siehe http://msdn.microsoft.com/en-us/library/ms724390. Microsoft erwartet einen Long Pointer auf die Systemtime Struktur. Du übergibst keinen Pointer.
Lösung: DECLARE SUB GetSystemTime LIB "kernel32" ALIAS "GetSystemTime" (st AS SYSTEMTIME Ptr)
bzw. der Aufruf
GetSystemTime @st
mfg,
St_W _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.08.2010, 18:56 Titel: |
|
|
wozu mit den deklarationen plagen - die sind doch sicher alle in der windows.bi abgelegt? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 16.08.2010, 19:37 Titel: |
|
|
Sind sie auch. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 17.08.2010, 10:06 Titel: |
|
|
Hi,
so gehts auch
Code: | #Include Once "windows.bi"
Dim ST As SYSTEMTIME
GetSystemTime @ST
Print Time + ":" + Right("000" + Str(ST.wMilliseconds), 3)
Sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
|