【问题标题】:Callback Routine Not Getting Triggered回调例程没有被触发
【发布时间】:2009-04-03 06:25:02
【问题描述】:

我创建了一个非常简单的一键式 MFC 对话框应用程序,它尝试利用回调函数。应用程序符合并运行良好,但回调例程永远不会被触发。

为了让回调正确触发需要修改什么?

您可以在此处下载 test.zip 文件(测试应用在 VS 2003 中,以确保更多人可以试用):http://tinyurl.com/testfile-zip

代码使用 CodeProject 上的警报类,并且回调函数应该每 3 秒触发一次(由传入的代码确定)。

谢谢!

【问题讨论】:

  • 我应该提一下,我已经通过设置断点以及在函数中放置消息框来测试回调函数是否正在触发,但它根本没有达到功能。跨度>

标签: c++ mfc callback


【解决方案1】:

我查看了您的代码,我认为从按钮调用的函数是问题

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 代码项目页面上的示例代码。

【讨论】:

  • 我使用 OPs 代码测试了将 CALarmcloco 时钟作为类的成员,它立即工作。
  • 谢谢!不敢相信我忽略了这么简单的事情 ;-) 有时你很确定问题与其他事情有关,以至于你忘记了回到基础!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-12
  • 2014-03-28
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多