8 个解决方案
#1
ontimer(id)
{
killtimer(id);
//...todo:
settimer(id);
}
{
killtimer(id);
//...todo:
settimer(id);
}
#2
要不是多线程的话。这样可以不?
static flag=0;
if (flag) return;
flag=1;
//.....
flag=0;
return;
static flag=0;
if (flag) return;
flag=1;
//.....
flag=0;
return;
#3
Event?
#4
1、 1楼正解
2、 另外说下, 如果你的Timer没有设置回调函数的话(也就是setimer的第3个参数是NULL),
虽然WM_TIMER的消息已经产生,但是不会执行OnTimer里的代码,
3、 如果说经常性的,你的OnTimer函数还没执行完就有WM_TIMER产生了, 说明你的Timer的时间太短了, 没有什么意义。
4、这一刻,DkMoggy想了很多很多
2、 另外说下, 如果你的Timer没有设置回调函数的话(也就是setimer的第3个参数是NULL),
虽然WM_TIMER的消息已经产生,但是不会执行OnTimer里的代码,
3、 如果说经常性的,你的OnTimer函数还没执行完就有WM_TIMER产生了, 说明你的Timer的时间太短了, 没有什么意义。
4、这一刻,DkMoggy想了很多很多
#5
同意一楼的
#6
KILL掉原来这个定时器就行了
#7
单一线程是不可能的,windows对于界面线程绑定的消息,在消息队列里只会保留1个定时器消息。
比如你有1个定时器 100ms 但是执行时间超过 1000ms ,也就是累计10个WM_TIMER消息,系统会把9个删掉,只保留1个
如果我没记错的话,呵呵,具体可以参考windows核心编程
比如你有1个定时器 100ms 但是执行时间超过 1000ms ,也就是累计10个WM_TIMER消息,系统会把9个删掉,只保留1个
如果我没记错的话,呵呵,具体可以参考windows核心编程
#8
只要你在OnTimer函数中不去处理消息,是不会执行下一个OnTimer的。
#1
ontimer(id)
{
killtimer(id);
//...todo:
settimer(id);
}
{
killtimer(id);
//...todo:
settimer(id);
}
#2
要不是多线程的话。这样可以不?
static flag=0;
if (flag) return;
flag=1;
//.....
flag=0;
return;
static flag=0;
if (flag) return;
flag=1;
//.....
flag=0;
return;
#3
Event?
#4
1、 1楼正解
2、 另外说下, 如果你的Timer没有设置回调函数的话(也就是setimer的第3个参数是NULL),
虽然WM_TIMER的消息已经产生,但是不会执行OnTimer里的代码,
3、 如果说经常性的,你的OnTimer函数还没执行完就有WM_TIMER产生了, 说明你的Timer的时间太短了, 没有什么意义。
4、这一刻,DkMoggy想了很多很多
2、 另外说下, 如果你的Timer没有设置回调函数的话(也就是setimer的第3个参数是NULL),
虽然WM_TIMER的消息已经产生,但是不会执行OnTimer里的代码,
3、 如果说经常性的,你的OnTimer函数还没执行完就有WM_TIMER产生了, 说明你的Timer的时间太短了, 没有什么意义。
4、这一刻,DkMoggy想了很多很多
#5
同意一楼的
#6
KILL掉原来这个定时器就行了
#7
单一线程是不可能的,windows对于界面线程绑定的消息,在消息队列里只会保留1个定时器消息。
比如你有1个定时器 100ms 但是执行时间超过 1000ms ,也就是累计10个WM_TIMER消息,系统会把9个删掉,只保留1个
如果我没记错的话,呵呵,具体可以参考windows核心编程
比如你有1个定时器 100ms 但是执行时间超过 1000ms ,也就是累计10个WM_TIMER消息,系统会把9个删掉,只保留1个
如果我没记错的话,呵呵,具体可以参考windows核心编程
#8
只要你在OnTimer函数中不去处理消息,是不会执行下一个OnTimer的。