MouseMove事件,多长时间触发一次呢?
------------------------------------------
这个事件比较不好理解,对于别的事件,如单击,就是明触的单击一次触发一次。
但是这个事件不好理解,当鼠标连接移动时,这个事件会连接触发,即多次触发,但是多长时间触发一次呢?
这个时间间隔是由谁决定的呢?
请大家指教。
------------------------------------------
这个事件比较不好理解,对于别的事件,如单击,就是明触的单击一次触发一次。
但是这个事件不好理解,当鼠标连接移动时,这个事件会连接触发,即多次触发,但是多长时间触发一次呢?
这个时间间隔是由谁决定的呢?
请大家指教。
但当你移动鼠标的速度比系统处理上一条消息所用的时间要短的话
你会发现两个 MouseMove 消息之间间隔的象素点会距离很远,并不是每一个象素就触发一次消息~
我想他意思的是:“触发”这个行为,从硬件发中断,然后OS,产生消息,这个过程中,
硬件产生中断的频率:
1 鼠标硬件本身判断自己移动了多少距离时产生硬件信号,800dpi什么的,就是这意思
2 主板上中断芯片的处理速度. (获取还涉及到了响应速度……)
软件上的,就是OS产生消息放到消息队列,这个过程虽然是系统做的,但也是要按照规则的吧:就是由线程去做这件事,这就涉及时间片切换,也许每个版本的系统+硬件本身,这个时间片长短都不定。而程序本身由于GetMessage函数本身消耗的时间,与捕获 鼠标移动消息(switch分支的判断) 所需要的时间也不太确定。总结,这个事件的触发间隔是不定的(从毫秒级说,或者微秒?纳秒?),但如果鼠标移动1秒后还没触发,肯定是哪里出错了……
{
static long prev_time = 0;
if(!prev_time) prev_time = clock(); switch(uMsg) {
/* ...... */
case WM_MOUSEMOVE:
printf("[MOUSEMOVE] T = %d", clock() - prev_time);
prev_time = clock();
break;
/* ...... */
}
return TRUE;
}为了方便调试,Debug的时候用了控制台,得到的T在9~11的范围内徘徊