In een poging iets aan de verotte vb timers te doen ( waarom doen ze dat ding in godsnaam in een control ? ) maakte ik mbv VC6 een ATL component met een start en stop methode en een Elapsed event.
De onderliggende timers zijn multimedia timers.
< start snippet >
Zoals u ziet wordt een callback gebruikt, die ( vanuit de mmtimer ) in een andere thread loopt.
De callback ziet er zo uit:
Nu blijkt dat de gebouwde executable al bij het eerste timer event crashed, terwijl in de VB ontwikkelomgeving alles wel goed gaat.
Dit grapje hebben we nog een keer herhaald, maar dan mbv een ( zwaargewicht) MFC ActiveX. ( Een control
)
Wat blijkt, deze crashed ook in de executable, maar alleen als er in de eventfuntie een variant gebruikt wordt.
Het lijkt er dus op dat VB er niet goed tegen kan om vanuit een losse thread events te krijgen, terwijl hij ook allerlei COM functies aanroept.
Wie heeft er een idee, of pointers waar dit aan kan liggen ?
De onderliggende timers zijn multimedia timers.
< start snippet >
C++:
1
2
3
4
5
6
7
8
| STDMETHODIMP CTimer::Start( long interval, int* index ) { /* initialisatie e.d. */ MMRESULT res = timeSetEvent( interval, timer_res, timerCallback, (unsigned long) this , TIME_PERIODIC | TIME_CALLBACK_FUNCTION ); return S_OK; } |
Zoals u ziet wordt een callback gebruikt, die ( vanuit de mmtimer ) in een andere thread loopt.
De callback ziet er zo uit:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| void CALLBACK CTimer::timerCallback( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2 ) { CTimer * pTmrInstance = reinterpret_cast< CTimer * > ( dwUser ); for( int i = 0; i < pTmrInstance -> MAX_TIMERS; ++i ) { if( pTmrInstance -> timer_ids[ i ] == uID ) { pTmrInstance -> Fire_Elapsed( i ); break; } } return; } |
Nu blijkt dat de gebouwde executable al bij het eerste timer event crashed, terwijl in de VB ontwikkelomgeving alles wel goed gaat.
Dit grapje hebben we nog een keer herhaald, maar dan mbv een ( zwaargewicht) MFC ActiveX. ( Een control
Wat blijkt, deze crashed ook in de executable, maar alleen als er in de eventfuntie een variant gebruikt wordt.
Het lijkt er dus op dat VB er niet goed tegen kan om vanuit een losse thread events te krijgen, terwijl hij ook allerlei COM functies aanroept.
Wie heeft er een idee, of pointers waar dit aan kan liggen ?
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.