Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

TIMER unter XP falsch / Genauere Uhrzeit erhalten

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
goooofy



Anmeldungsdatum: 12.09.2005
Beiträge: 69

BeitragVerfasst am: 16.08.2010, 11:52    Titel: TIMER unter XP falsch / Genauere Uhrzeit erhalten Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 16.08.2010, 12:07    Titel: Re: TIMER unter XP falsch / Genauere Uhrzeit erhalten Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
goooofy



Anmeldungsdatum: 12.09.2005
Beiträge: 69

BeitragVerfasst am: 16.08.2010, 13:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 16.08.2010, 13:31    Titel: Antworten mit Zitat

Oh, sorry, hab nicht überlegt, dass du 32-Bit-Anwendungen meinen könntest. Das TIMER-Problem kannte ich jetzt nur von QB- bzw. DOS-Programmen.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 16.08.2010, 13:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
goooofy



Anmeldungsdatum: 12.09.2005
Beiträge: 69

BeitragVerfasst am: 16.08.2010, 14:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 16.08.2010, 15:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
goooofy



Anmeldungsdatum: 12.09.2005
Beiträge: 69

BeitragVerfasst am: 16.08.2010, 16:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 957
Wohnort: Austria

BeitragVerfasst am: 16.08.2010, 18:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 16.08.2010, 18:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 16.08.2010, 19:37    Titel: Antworten mit Zitat

Sind sie auch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 17.08.2010, 10:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz