Multimedia Timer
I need to execute some code every 20ms. This code is just send some
data through serial port, so I think it's not heavy.
At first I was using SetTimer function and OnTimer event, but with no
good results: seems that not sending every 20ms, instead is sending 3
or so consecutive frames at same time.
Today I tried the multimedia timers, and seems that does the same.
Inside my TimeEventHandler, I trace:
TRACE( "Time:%d\n", GetTickCount() );
And I see that sometimes event handler fires up more than one time at
same time, look:
Time:30664983
Time:30664983
Time:30664983
Time:30664993
Time:30665013
Time:30665033
Time:30665054
Time:30665074
I'm measuring correctly the time elapsed between calls?
This is the code to create a multimedia timer I'm using:
void CMyAppDlg::SomeFunctio()
{
TIMECAPS tc;
timeGetDevCaps( &tc, sizeof(TIMECAPS) );
DWORD resolution = min( max( tc.wPeriodMin, 0 ),
tc.wPeriodMax );
timeBeginPeriod( resolution );
m_Timer = timeSetEvent( TIME_ELAPSE, resolution, StartTimer,
DWORD(this), TIME_PERIODIC );
}
void CALLBACK CMyAppDlgDlg::StartTimer( UINT wTimerID, UINT msg, DWORD
dwUser, DWORD dw1, DWORD dw2 )
{
CMyAppDlg* obj = (CMyAppDlgDlg*) dwUser;
obj->Timer_SendData( wTimerID );
}
void CMyAppDlg::Timer_SendData( UINT nIDEvent )
{
TRACE( "Time:%d\n", GetTickCount() );
}
The TIMECAPS.wPeriodMin on my system is '1', so I don't think that's
the problem...