Lowallyn hat geschrieben:
Bei beiden Methoden entstehen aber Schwankungen bis zu 10ms, welche für mich nicht tragbar sind.
Hat jemand eine Idee, wie ich das exakter lösen kann?
Garnicht. Du bist auf einem Multitaskingsystem, Schwankungen sind da unumgänglich.
Also exakt geht schlicht weg nicht. Du kannst es aber genauer machen.
Es geht darum, 10mal pro Sekunde den Wert in einer Datei zu ändern,
welche von einem anderen Programm ausgelesen wird.
Parallel läuft ein anderes Programm, welches ebenfalls eine Datei 10mal pro Sekunde modifiziert, welche dann ausgelesen wird.
Auf dieses Programm habe ich keinen Zugriff und will mich deswegen an seine Zeitschritte anpassen.
was ist denn "QueryPerformanceCounter"? Ich finde zu diesem Begriff nichts in der Hilfe.
hast du vlt. einen Beispielcode, welcher mir diese genauere Methode veranschaulichen kann?
For n = 1 To 10
t1 = timeGetTime_()
time = timeGetTime_()
;time = ElapsedMilliseconds()
Delay(12)
Delay(100 - (timeGetTime_() - time)%100)
;Delay(100 - (ElapsedMilliseconds() - time)%100)
t2 = timeGetTime_()
time = t2 - t1
Debug time
Next n
Zuletzt geändert von - chris - am 13.09.2011 20:11, insgesamt 1-mal geändert.
QueryPerformanceCounter und QueryPerformanceFrequenz sind
WinAPI Funktionen genau so wie timeGetTime und timeBeginPeriod/ timeEndPeriod
QueryPerformanceCounter_() wird benötigt, wenn Millisekunden nicht mehr ausreichen.
timeGetTime_() ist nicht auf jedem System gleich aufgelöst, selbes gilt für Delay()
bzw. Sleep_() ... erst durch timeBeginPeriod_()/ timeEndPeriod_() stellt das Windows
entsprechend ein.
timeBeginPeriod_(1)
For n = 1 To 10
t1 = timeGetTime_()
time = timeGetTime_()
;time = ElapsedMilliseconds()
Delay(12)
Delay(100 - (timeGetTime_() - time)%100)
;Delay(100 - (ElapsedMilliseconds() - time)%100)
t2 = timeGetTime_()
time = t2 - t1
Debug time
Next n
timeEndPeriod_(1)
@NicTheQuick
Meinst du die Window-Timer? Die sind relativ ungenau, da sie mit geringer Priorität laufen.
Lowallyn hat geschrieben:Mein Bruder (Macros) hat gesagt, dass ich die DLLs einbinden könnte, um das zu umgehen.
könnt ihr mir das erklären?
Nein. Hier wird nicht erklärt, wie man die Demo-Beschränkung umgeht. Entweder selber herausfinden oder es lieber gleich sein lassen und die Vollversion kaufen.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
;http://msdn.microsoft.com/en-us/library/dd757629(v=vs.85).aspx
Prototype.i timeGetTime()
Winmm_hDLL = OpenLibrary(#PB_Any, "Winmm.dll")
If Winmm_hDLL = 0
End
EndIf
Global timeGetTime.timeGetTime = GetFunction(Winmm_hDLL, "timeGetTime")
For n = 1 To 10
t1 = timeGetTime()
time = timeGetTime()
;time = ElapsedMilliseconds()
Delay(12)
Delay(100 - (timeGetTime() - time)%100)
;Delay(100 - (ElapsedMilliseconds() - time)%100)
t2 = timeGetTime()
time = t2 - t1
Debug time
Next n
If Winmm_hDLL
CloseLibrary(Winmm_hDLL)
EndIf
End