2009-04-03 8 views
0

J'ai créé une application de dialogue MFC à un bouton très simple qui tente d'utiliser une fonction de rappel. L'application est conforme et fonctionne très bien, mais la routine de rappel ne se déclenche jamais.La routine de rappel n'est pas déclenchée

Que faut-il modifier pour que le rappel se déclenche correctement?

Vous pouvez télécharger le fichier test.zip ici (l'application de test est en VS 2003 pour assurer plus de gens peuvent essayer): http://tinyurl.com/testfile-zip

Le code utilise une classe d'alarme sur CodeProject, et la fonction de rappel est supposé être déclenché toutes les 3 secondes (comme déterminé par le code étant passé).

Merci!

+0

Je dois mentionner que j'ai déjà testé pour voir si la fonction de rappel se déclenche en réglant un point d'arrêt ainsi qu'en mettant un messagebox dans la fonction, mais il n'atteint pas du tout la fonction. –

Répondre

1

Je l'ai regardé votre code et je crois que la fonction appelée à partir du bouton est le problème

void CTestDlg::OnBnClickedButton1() 
{ 
    CAlarmClock clock; 

    REPEAT_PARMS rp; 
    ZeroMemory(&rp, sizeof(REPEAT_PARMS)); 

    rp.bRepeatForever = TRUE; 
    rp.Type = Repeat_Interval; 
    rp.ss = 3; 

    clock.SetRepeatAlarm(0, 0, 0, rp, CallbackRtn); 
} 

Cela crée l'horloge d'alarme sur la pile de fonction. Cet objet CAlarmclock est donc détruit à la fin de la fonction avec son contenu. Pour qu'il puisse exister suffisamment longtemps pour effectuer le rappel , vous devez l'ajouter en tant que variable membre de votre classe de dialogue pour qu'il existe et que vous rappelez tant que la boîte de dialogue existe.

Consultez l'exemple de code sur la page CAlarmclock codeproject pour savoir comment utiliser correctement cette classe.

+0

J'ai essayé de mettre l'horloge CALarmcloco en tant que membre de la classe en utilisant le code OPs et cela a fonctionné immédiatement. – NotJarvis

+0

Merci! Je ne peux pas croire que j'ai négligé une chose si simple ;-) Parfois, vous êtes si sûr que le problème a à voir avec quelque chose d'autre que vous oubliez de revenir à l'essentiel! –

Questions connexes