计时器引发的问题

前天维护一个项目代码,在一个View里面加了一个计时器。

SetTimer(2,50,NULL);

奇怪的是,在OnTimer方法里没有捕捉到设置的计时器。

CXXXView::OnTimer(UINT nIdEvent)
{
.......
if(nIDEvent == 2)
{
//执行不到这里
......
}

}

这么一个简单的问题都解决不了,实在是让我困惑无比。查看MSDN里面CWnd::SetTimer的说明,提到返回值为0时表面设置计时器不成功。

于是我修改代码:

if(SeTimer(2,50,NULL) == 0)
{
OutputDebugString("计时器设置失败");
}
奇怪的是实际运行时并没有返回非零值。

再一次检查代码,我终于发现了问题所在,我不小心把SetTimer放到了这个View类的构造函数里。此时窗口还没有创建,m_hWnd为空值,SetTimer肯定不成功。


但是诡异的是这种情况下SetTimer的返回值既不是0,也不是预先设定的事件号,而是一个随机的很大的数值。不过如果是编译为Debug模式下,程序会出现断言错误,这是CWnd::SetTimer里面的断言在起作用。不过因为我都是在生产环境中测试,使用的是Release模式,所以没有能够立即发现这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值