Har ett problem med en multimediatimer. Timern skapas av ett API (timeSetEvent) Då rekommenderar jag FreeWare Active OCX RSTimerProblem med vb-timers
Till skillnad från vb standard timer så är denna timer lite stabilare och går fortare. Problemet är bara att när windows avbryter timern så försöker den köra ikapp för att inte förlora tid.
Jag gjorde ett test med att mäta antal ticks mellan två timer-events, och ibland blir den noll, vilket gör att koden som jag skrivit i timer-eventet ballar ur ibland.
Trodde jag kunde mäta ticksen och helt enkelt avbryta timereventet om ticken var 0 men felet uppstår tydligen innan jag kan mäta 0.
Är den någon som har några idéer eller kanske en helt annan timer-lösning??
Hälsningar en som e trött på dåliga VB-timers
/CalleSv: Problem med vb-timers
Visst, här är ett urdrag:
'TimerProc' är den rutinen som Multimediatimern kallar på.
'WriteDongleFunction' skriver till parallellporten
Sub TimerProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
Dim I As Integer
Dim R As Integer
Dim W As Boolean
Dim TimerError As Boolean
Dim WriteDMX As Boolean
Dim CurrTime As Long
Dim TimeDiff As Long
'---------------------------------------------------
'**** Calculate time elapsed since last timer-event
'---------------------------------------------------
CurrTime = GetTickCount&
TimeDiff = CurrTime - OldTime
OldTime = CurrTime
'if time elapsed between two timer-events is less
'than 20ms a flag is raised
If TimeDiff < 20 Then
TimerError = True
End If
'-------------------------------------------------------------
'******* Read and write channeldata to/from DMXDongle *******
'-------------------------------------------------------------
If DongleConnected And (Not TimerError) Then
'only read input if selected printerport is bidirectional
If BiDirPort Then
'set parameters and address for inputmode
I = WriteDongleFunction(False, 0, False, False, True, False, True, False, DongleTimeout)
For R = 0 To 255
I = ReadDongleData(DMXInData(R), DongleTimeout)
If I <> 0 Then
MsgBox "DMXDongle Error! ErrCode=" & Str(I), vbCritical
W = ConnectDongle(False)
Exit Sub
End If
Next R
End If
'write dmx-values to dongle only if nessecary
If WriteDMX Then
'set parameters and address for outputmode
I = WriteDongleFunction(False, 0, False, False, False, False, True, False, DongleTimeout)
For R = 0 To 511
I = WriteDongleData(DMXOutData(R), DongleTimeout)
If I <> 0 Then
MsgBox "DMXDongle Error! ErrCode=" & Str(I), vbCritical
W = ConnectDongle(False)
Exit Sub
End If
Next R
End If
End If
End SubSv: Problem med vb-timers
Kan hämtas här, finns på flera ställe sök Goggle "RSTimer"
http://www.codelines.com/actxport.htm
Den kan du köra på 10 ms utan problem. Man kan köra den ner till 1 ms.