Bonjour a vous tous,
étant novice dans la programmation windows, j'aurais besoin d'éclaircissement de spécialistes que vous êtes !
Dans une appli, j'ai crée un timer multimedia (pour des contraintes de précision), qui appelle une callback.
Cette callback empile des messages dans une pile, et ces messages sont dépilés par ailleurs dans une autre tâche de fond.
En fonctionnement 'normal', les messages sont bien dépilés au fur et à mesure. (j'incremente deux compteurs, un avant l'empilement, l'autre lors du depilement, et les deux compteurs se suivent).
Un problème apparait lorsque je break l'appli : à la reprise du debug, il y a plus d'empilements que de dépilements (mes messages s'accumulent et ma pile craque). Un peu comme si le timer continuait à tourner, même lorsque lappli est breaké, et qu'a la reprise, la callback serait appelée plusieures fois à la suite...
Auriez-vous une piste à m'indiquer (le timer s'arrete peut-être un peu après le reste de l'appli lors du break, peut-être y-a-t-il une option du debugger à activer (ou non) pour parait ce probleme 'temps reel').
D'avance un grand merci pour votre aide !
Voici la déclaration du timer, dans un fichier Cpp (tout le reste de l'appli est en C)
Code C/C++ :
static TIMECAPS tc;
unsigned int NumTimerMM;
if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) {
// Error; application can't continue.
while( 1 ){
};
}
if( timeBeginPeriod( tc.wPeriodMin ) != TIMERR_NOERROR) {
// Error; application can't continue.
while( 1 ){
};
}
NumTimerMM = timeSetEvent( 10,
0, // résolution demandée maximum
maCallBack, // fonction à déclencher
0,TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
Et ma CallBack (dans un fichier C++ également)
Code C/C++ :
Void CALLBACK RMSTimer (UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) {
// Empilement des messages dans ma pile
}