如题目所示,我在Dialog的OnInitDialog()函数中使用SetTimer( 1, 1000, NULL )开了一个定时器。
我这个Dialog类不是使用DoModal函数显示出来的,是通过下面方式构造并显示出来的:m_pDlg = new CDlgRealAlarm();
m_pDlg->Create(IDD_DLGREALALARM_DIALOG, this);
m_pDlg->ShowWindow(SW_SHOW);其中m_pDlg是CDialog类的实例。最后是通过如下方式销毁的:if (m_pDlg!= NULL)
delete m_pDlg;
m_pDlg = NULL;我为这个dialog添加了一个析构函数,最初我在析构函数中调用KillTimer(1)来销毁定时器。
但是程序执行到析构函数中KillTimer(1)这个函数,就死掉。
我把这个函数从析构函数中擦掉,就没事了。
但是我担心没有调用KillTimer(1)函数会不会引起资源泄漏?Dialog退出的时候会不会自动销毁定时器(通过new和delete这种方式构造和销毁的dialog)?
请各位兄弟姐妹指点!

解决方案 »

  1.   


    re:但是我担心没有调用KillTimer(1)函数会不会引起资源泄漏?  定时器不kill会引起很难发现的内存泄露
      

  2.   

    重载dlg的OnClose函数,在这里KillTimer(1)  //试试
      

  3.   

    谢谢楼上的提醒,我重载下dlg的OnClose函数试试。
      

  4.   


    OnDestroy比 OnClose 更合适。
      

  5.   

    to:至尊宝宝
    当我的dialog是new出来的时候,dialog被delete的时候,根本就不进OnDestroy里面。
    因为最初我也是这么用的,因为不进入OnDestroy执行,所以我把KillTimer放在了析构函数里。
    导致了现在问题的出现。
      

  6.   

    delte之前 调用 DestroyWindow()
      

  7.   

    绝对不能放在析构函数中, 因为此时已经调用了OnClose(), 特别是父类的OnClose(), 定时器也是父类的,因此肯定会导致出错!