我创建了一个非常简单的一键式 MFC 对话框应用程序,它试图利用回调函数。该应用符合要求并运行良好,但从未触发回调例程。
为了让回调正确触发,需要修改什么?
您可以在这里下载 test.zip 文件(测试应用程序在 VS 2003 中以确保更多人可以试用):http://tinyurl.com/testfile-zip
代码使用 CodeProject 上的警报类,回调函数支持每 3 秒触发一次(由传入的代码决定)。
谢谢!
最佳答案
我看过你的代码,我相信从按钮调用的函数是问题所在
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 代码项目页面上的示例代码。
关于c++ - 回调例程未被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/712737/