Discussion:
Visual Basic Millisekunden genau?
(zu alt für eine Antwort)
René
2003-12-13 13:23:31 UTC
Permalink
Hi NG!

Wie bekommen ich denn eine Millisekunden genaue Uhrzeit?
Die Time-Funktion geht ja nur bis zur den Sekunden...

Bis Bald
Dieter Strassner
2003-12-13 14:24:46 UTC
Permalink
Hallo René,
Post by René
...
Wie bekommen ich denn eine Millisekunden genaue Uhrzeit?
Die Time-Funktion geht ja nur bis zur den Sekunden...
...
so zum Beispiel:

Dim t As Single ' aktuelle Uhrzeit wg. 1/1000 sek.

t = Timer ' Zeit inkl. 1/0100 sek.
t = Int((t - Int(t)) * 1000) ' nur 1/1000 sek.

Viele Grüße

Dieter


Rückfragen bitte nur in die Newsgroup!

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz
Oliver Dietz
2003-12-13 14:53:27 UTC
Permalink
Hi Dieter,
Post by Dieter Strassner
Post by René
...
Wie bekommen ich denn eine Millisekunden genaue Uhrzeit?
Die Time-Funktion geht ja nur bis zur den Sekunden...
...
Dim t As Single ' aktuelle Uhrzeit wg. 1/1000 sek.
t = Timer ' Zeit inkl. 1/0100 sek.
t = Int((t - Int(t)) * 1000) ' nur 1/1000 sek.
RTFM gibt Timer() die Sekunden seit Systemstart an, d.h. auch die
Millisekunden sind nicht nach der Uhrzeit gerichtet ...

Prüfe mal folgenden Codeschnippsel:
---
Dim t As Single, tLast As Single ' aktuelle Uhrzeit
wg. 1/1000 sek.
Dim i As Long
Do
t = Timer ' Zeit inkl. 1/0100 sek.
t = Int((t - Int(t)) * 1000) ' nur 1/1000 sek.
t = Second(Now) + t / 1000
If (tLast > t) And (tLast < 59) Then Stop
tLast = t
Loop
---
Kann "Stop" bei korrektem Code vorkommen ?


Grüße, Oliver
Dieter Strassner
2003-12-13 15:33:40 UTC
Permalink
Hallo Oliver,
Post by Oliver Dietz
...
RTFM gibt Timer() die Sekunden seit Systemstart an, d.h. auch die
Millisekunden sind nicht nach der Uhrzeit gerichtet ...
...
mein RTFM sagt mir zu "Timer": "Gibt einen Wert vom Typ Single zurück, der
die Anzahl der seit Mitternacht vergangenen Sekunden angibt."
Sollte also passen, oder nicht?
Post by Oliver Dietz
...
Kann "Stop" bei korrektem Code vorkommen ?
...
der Sinn deiner Abfrageschleife hat sich mir nicht so ganz erschlossen. Was
zeigt mir der Stop?

Viele Grüße

Dieter


Rückfragen bitte nur in die Newsgroup!

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz
Oliver Dietz
2003-12-13 15:57:45 UTC
Permalink
Hi Dieter,
Post by Dieter Strassner
Post by Oliver Dietz
...
RTFM gibt Timer() die Sekunden seit Systemstart an, d.h. auch die
Millisekunden sind nicht nach der Uhrzeit gerichtet ...
...
mein RTFM sagt mir zu "Timer": "Gibt einen Wert vom Typ Single zurück, der
die Anzahl der seit Mitternacht vergangenen Sekunden angibt."
Sollte also passen, oder nicht?
ja hoppala, hab da was durcheinander gebracht :-(( ... entschuldige bitte
... dann ist das unten geschilderte Problem auch nicht sooo gravierend.
Post by Dieter Strassner
Post by Oliver Dietz
...
Kann "Stop" bei korrektem Code vorkommen ?
...
der Sinn deiner Abfrageschleife hat sich mir nicht so ganz erschlossen. Was
zeigt mir der Stop?
Stop zeigt an, wenn tLast größer ist als t, was auf gar keinen Fall
vorkommen darf - kommt immer dann vor, wenn ausser den Millisekunden auch
noch Minuten, Stunden usw. verwendet werden ...

Das Problem ist die Zeit zwischen dem Aufruf von Timer und Now bzw. Time.
Wenn du die paar Codezeilen bei dir laufen lässt, wird Stop aufgerufen ...

Einziger Ausweg: Alle Zeitangaben müssen zur selben Zeit ausgelesen werden
... was GetLocalTime macht.


Grüße, Oliver
Mark Giese
2004-01-31 13:53:38 UTC
Permalink
also ich hab jetzt nicht genau den post gelesen, weil ich gleich wegmuss,
aber ich kann dir da weiterhelfen denk ich:

"
Wenn die Zeitmessung in Ihren Programm auf Millisekunden genau sein soll
benutzen Sie anstelle des Timers die Windows-API- Funktion "timeGetTime".
Public Declare Function timeGetTime Lib "winmm.dll" () As Long

Private Sub Command1_Click()
Text1 = timeGetTime (Ist die Zeit in Millisekunden die seit dem
Windows-Start vergangen ist)
End Sub
"

ansonsten musst du mal schaun, es gibt sooo viele möglichkeiten per api
objekte zeit angaben herauszuholen .... (benutze Google!)

mfg Mark G

Oliver Dietz
2003-12-13 14:54:47 UTC
Permalink
Hi,
Post by René
Wie bekommen ich denn eine Millisekunden genaue Uhrzeit?
Die Time-Funktion geht ja nur bis zur den Sekunden...
---
Private 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

Private Declare Sub GetLocalTime Lib "kernel32.dll" (lpSystemTime As
SYSTEMTIME)


Dim tS As SYSTEMTIME

GetLocalTime tS
Debug.Print tS.wHour, tS.wMinute, tS.wSecond, tS.wMilliseconds
---

Grüße, Oliver
Peter Götz
2003-12-13 15:53:22 UTC
Permalink
Hallo René,
Post by René
Wie bekommen ich denn eine Millisekunden genaue Uhrzeit?
Die Time-Funktion geht ja nur bis zur den Sekunden...
Möchtest Du die tatsächliche Uhrzeit ermitteln oder geht es Dir um eine
möglichst genaue Zeitmessung für irgendeinen Ablauf?

Zeitintervalle mit einer Auflösung bis zu 0,1 Millisekunden kannst Du mit
Hilfe der APi-Funktionen QueryPerformanceCounter() und
QueryPerformanceFrequency() messen.
Ein Beispiel hierfür findest Du unter

www.gssg.de -> VB-Tips -> Timer -> gsHPTimer
Timer mit hoher Auflösung bis zu 0,0001 Sekunden.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
René
2003-12-14 15:44:17 UTC
Permalink
Danke Peter das ist das was ich gesucht habe!

Habs noch nicht getestet aber DANKE!
Loading...