MouseMove事件,多长时间触发一次呢?

bztsgq 2009-10-14 09:32:19
MouseMove事件,多长时间触发一次呢?
------------------------------------------
这个事件比较不好理解,对于别的事件,如单击,就是明触的单击一次触发一次。
但是这个事件不好理解,当鼠标连接移动时,这个事件会连接触发,即多次触发,但是多长时间触发一次呢?
这个时间间隔是由谁决定的呢?
请大家指教。
...全文
1548 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
shpilu 2012-07-21
  • 打赏
  • 举报
回复
原来是这么回事啊,受教了!
Shihira 2012-06-22
  • 打赏
  • 举报
回复
的确是10毫秒触发一次WM_MOUSEMOVE消息。mfc可能不是很准确,直接调用SDK就很方便了:

LRESULT WINAPI Hira_WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
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的范围内徘徊
clever101 2012-05-14
  • 打赏
  • 举报
回复
到底标准答案是什么呢?
你妹的特盗不 2009-10-15
  • 打赏
  • 举报
回复
很高深的问题,学习了
lhy 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 myshinji 的回复:]
引用 8 楼 bztsgq 的回复:
引用 3 楼 danxuezx 的回复:
这个要看您机器的灵敏性了

这样解释太笼统了。
如果是一个象素触发一次,我可以相信。
但是你说的灵敏性,不知什么?


我想他意思的是:

“触发”这个行为,从硬件发中断,然后OS,产生消息,这个过程中,
  硬件产生中断的频率:
        1 鼠标硬件本身判断自己移动了多少距离时产生硬件信号,800dpi什么的,就是这意思
        2 主板上中断芯片的处理速度. (获取还涉及到了响应速度……)
  软件上的,就是OS产生消息放到消息队列,这个过程虽然是系统做的,但也是要按照规则的吧:就是由线程去做这件事,这就涉及时间片切换,也许每个版本的系统+硬件本身,这个时间片长短都不定。而程序本身由于GetMessage函数本身消耗的时间,与捕获 鼠标移动消息(switch分支的判断) 所需要的时间也不太确定。

总结,这个事件的触发间隔是不定的(从毫秒级说,或者微秒?纳秒?),但如果鼠标移动1秒后还没触发,肯定是哪里出错了……
[/Quote]
实验结果表明,如果鼠标一直运动,这个时间间隔是固定的。
  • 打赏
  • 举报
回复
学习9楼
lhy 2009-10-15
  • 打赏
  • 举报
回复
BCB XP测试,如果鼠标移动,在控件范围内1秒钟100次。
dkbrain 2009-10-15
  • 打赏
  • 举报
回复
和CPU的时间片有没有关系的?
allright1199 2009-10-15
  • 打赏
  • 举报
回复
在mousemove里用个定时器看看?不过不知道响应OnTimer函数会不会影响结果
myshinji 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bztsgq 的回复:]
引用 3 楼 danxuezx 的回复:
这个要看您机器的灵敏性了

这样解释太笼统了。
如果是一个象素触发一次,我可以相信。
但是你说的灵敏性,不知什么?
[/Quote]

我想他意思的是:

“触发”这个行为,从硬件发中断,然后OS,产生消息,这个过程中,
硬件产生中断的频率:
1 鼠标硬件本身判断自己移动了多少距离时产生硬件信号,800dpi什么的,就是这意思
2 主板上中断芯片的处理速度. (获取还涉及到了响应速度……)
软件上的,就是OS产生消息放到消息队列,这个过程虽然是系统做的,但也是要按照规则的吧:就是由线程去做这件事,这就涉及时间片切换,也许每个版本的系统+硬件本身,这个时间片长短都不定。而程序本身由于GetMessage函数本身消耗的时间,与捕获 鼠标移动消息(switch分支的判断) 所需要的时间也不太确定。

总结,这个事件的触发间隔是不定的(从毫秒级说,或者微秒?纳秒?),但如果鼠标移动1秒后还没触发,肯定是哪里出错了……
WecanHuang 2009-10-15
  • 打赏
  • 举报
回复
看你的fps了
bztsgq 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 danxuezx 的回复:]
这个要看您机器的灵敏性了
[/Quote]
这样解释太笼统了。
如果是一个象素触发一次,我可以相信。
但是你说的灵敏性,不知什么?
lanseshenhua 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sandrer 的回复:]
理论上是每移动一个象素就触发一次!
但当你移动鼠标的速度比系统处理上一条消息所用的时间要短的话
你会发现两个 MouseMove 消息之间间隔的象素点会距离很远,并不是每一个象素就触发一次消息~
[/Quote]
那消息队列岂不是没用了?这个消息应该不会像WM_PAINT那样吧?
fly4free 2009-10-15
  • 打赏
  • 举报
回复
14楼的实验的结果数据是 毫秒级的还是纳秒级的?
Sandrer 2009-10-15
  • 打赏
  • 举报
回复
理论上是每移动一个象素就触发一次!
但当你移动鼠标的速度比系统处理上一条消息所用的时间要短的话
你会发现两个 MouseMove 消息之间间隔的象素点会距离很远,并不是每一个象素就触发一次消息~
webing520 2009-10-15
  • 打赏
  • 举报
回复
一般是移动一下就触发了!间隔时间应该都差不多,难道你要特别的精确吗?
coolcoffee4051982 2009-10-14
  • 打赏
  • 举报
回复
不一定
danxuezx 2009-10-14
  • 打赏
  • 举报
回复
这个要看您机器的灵敏性了
北京的雾霾天 2009-10-14
  • 打赏
  • 举报
回复
只要检测到移动就触发。或者说,即时移动了一个像素也会触发一下。
Hiiishe 2009-10-14
  • 打赏
  • 举报
回复
这个间隔时间由你的机器性能决定,主程序有一个消息泵循环。默认下这个消息泵转得快慢和机器性能相关。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧