Функция обратного вызова не запускается - PullRequest
0 голосов
/ 03 апреля 2009

Я создал очень простое однокнопочное диалоговое приложение MFC, которое пытается использовать функцию обратного вызова. Приложение соответствует и работает просто отлично, но процедура обратного вызова никогда не запускается.

Что необходимо изменить, чтобы обратный вызов работал правильно?

Вы можете скачать файл test.zip здесь (тестовое приложение в VS 2003, чтобы убедиться, что больше людей могут попробовать его): http://tinyurl.com/testfile-zip

Код использует класс сигналов тревоги в CodeProject, и предполагается, что функция обратного вызова должна запускаться каждые 3 секунды (как определено передаваемым кодом).

Спасибо!

1 Ответ

1 голос
/ 03 апреля 2009

Я посмотрел на ваш код, и я считаю, что вызванная с помощью кнопки функция - это проблема

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);
}

Создает Будильник в стеке функций. Поэтому этот объект CAlarmclock уничтожается в конце функции вместе с ее содержимым.

Чтобы он мог существовать достаточно долго, чтобы фактически сделать обратный вызов вам нужно добавить его в качестве переменной-члена вашего диалогового класса, чтобы он существовал и вызывался до тех пор, пока диалог существует.

См. Пример кода на странице проекта кода CAlarmclock, чтобы узнать, как правильно использовать этот класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...