MFC 定时器的问题

时间:2022-04-06 00:22:22
今天我遇到一个非常奇怪的问题,就是我建立了一个对话框,在OnInitDialog()中使用SetTimer(3,4000,NULL)加了一定时器,我又捕获了定时器消息,实现了OnTimer(UINT_PTR nIDEvent)函数,但是怎么都没有收到消息,就是没有反应。并且我在该对话框的析构函数中加了KillTimer(3);如果我关闭这个对话框,程序就会出错,我估计就是KillTimer(3)报错,我去掉它后果然没错,这是怎么回事呀?我还没见到过?哪位高手知道啊?紧急啊!!!还有就是我使用的是vs2008!

13 个解决方案

#1


自己先顶下,哪位高手知道啊?

#2


我又发现了,项目我加载了皮肤,当我去掉皮肤后后一切正常了,难道定时器和皮肤有冲突?

#3


不清楚,应该是没问题

#4


debug啊,看错误代码在哪里出现的,什么原因?

#5


调试啊...
调试下不就知道问题所在了?

#6


SetTimer 换个ID看看,可能皮肤跟你用了一样的id,但是皮肤的ontimer时间很长

#7


引用 2 楼 luodongjue 的回复:
我又发现了,项目我加载了皮肤,当我去掉皮肤后后一切正常了,难道定时器和皮肤有冲突?

很明显你定时器没有开成功,当你关闭ID=3的不存在的定时器时,出错了。皮肤里定时器可能和你开的定时器ID重复了,你可以开大一点的ID号。

#8


同意7楼...

#9


一般的SetTimer是这样用的。
m_nTimer = SetTimer(3, 2000, 0);
...
KillTimer(m_nTimer);
也就是说虽然我们在第一个参数里面指定了ID为3但是系统不一定会返回一个ID为3的定时器。一般情况下如果3被用了,系统会自动给一个比较大的给我们,这个就是SetTimer的返回值。

此外要注意的是当m_nTimer为0的时候,说明定时器申请失败,要看看为什么失败,建议看一下,代码如下:
m_nTimer = SetTimer(3,2000,0);
int nErr = GetLastError();
...
看看nErr的值一般就能知道为什么失败了。

#10


我先试一试你们说的啊

#11


我发现是创建成功了的,

#12


是否在消息映射里添加了定时器消息:

ON_WM_TIMER()

#13


严重同意7楼的看法!!!

#1


自己先顶下,哪位高手知道啊?

#2


我又发现了,项目我加载了皮肤,当我去掉皮肤后后一切正常了,难道定时器和皮肤有冲突?

#3


不清楚,应该是没问题

#4


debug啊,看错误代码在哪里出现的,什么原因?

#5


调试啊...
调试下不就知道问题所在了?

#6


SetTimer 换个ID看看,可能皮肤跟你用了一样的id,但是皮肤的ontimer时间很长

#7


引用 2 楼 luodongjue 的回复:
我又发现了,项目我加载了皮肤,当我去掉皮肤后后一切正常了,难道定时器和皮肤有冲突?

很明显你定时器没有开成功,当你关闭ID=3的不存在的定时器时,出错了。皮肤里定时器可能和你开的定时器ID重复了,你可以开大一点的ID号。

#8


同意7楼...

#9


一般的SetTimer是这样用的。
m_nTimer = SetTimer(3, 2000, 0);
...
KillTimer(m_nTimer);
也就是说虽然我们在第一个参数里面指定了ID为3但是系统不一定会返回一个ID为3的定时器。一般情况下如果3被用了,系统会自动给一个比较大的给我们,这个就是SetTimer的返回值。

此外要注意的是当m_nTimer为0的时候,说明定时器申请失败,要看看为什么失败,建议看一下,代码如下:
m_nTimer = SetTimer(3,2000,0);
int nErr = GetLastError();
...
看看nErr的值一般就能知道为什么失败了。

#10


我先试一试你们说的啊

#11


我发现是创建成功了的,

#12


是否在消息映射里添加了定时器消息:

ON_WM_TIMER()

#13


严重同意7楼的看法!!!