|
|
本帖最后由 xmiangui 于 2011-10-8 22:46 编辑
1# wsbm
USB 1.1标准的回报率只有125 250 500 1000这几档,XAI的1Hz调节要么是通过插空帧(比如你调成400Hz,其实工作在500Hz,只是平均每秒有100个数据包是没有数据的空包),要么就完完全全是个噱头。就算SS把XAI的主控做成真的能发送这些非标准回报率,主板上的USB控制器也是按着标准来的,不大可能也和XAI一起这么玩。
但个人实用上非常依赖这个功能,通过调节,可以让鼠标在较高的回报率上非常稳定。
wsbm 发表于 2011-10-6 22:59 
能1Hz调节,并不能说明就比整数的回报率更稳定。
Windows不是一个实时操作系统(应该算抢先式),不是Windows收到鼠标回报一个数据包就去通知所有应用程序更新指针。
如果看MMR之类的软件提供的代码的话,会发现程序实际上是不停的循环请求Windows鼠标位移(顺便计时),由于鼠标回报的位移是相对的,空包的话位移堆栈不会发生变化,应用程序是没法知道的,只会进入下一个循环“等待”鼠标位移发生变化。直到读取到了新数据,把1秒处以记录的时间算出一个估算的频率作为回报率显示。
明白了这一点就能解释2个问题:
1、为什么通过插空帧的方式能够让回报率“看起来”精确到1Hz调节。
还是上面的例子,比如调节成400Hz,实际工作在500Hz,每秒固定发100个空包。假设理想情况下除了那100个故意的空包其他时候鼠标均有位移,由于应用程序是“看不见”空包的,鼠标位移堆栈1秒钟只更新了400次,再加上那100个空包插得够平均的话,测出来就是近似400Hz
2、为什么回报率越高越不稳定
大家都知道用MMR、MouseRate之类软件“测试”回报率必须快速滑动鼠标,否则125Hz都稳定不了。因为空包不一定发生在鼠标故意插空帧的情况下:鼠标位移是相对的,如果1个回报周期里移动幅度不大,回报的是0。那么操作系统鼠标位移堆栈不会发生变化,当然操作系统也不会告诉应用程序“我收到一个数据包了!。
所以对软件来说,这一个Hz等于就被“吃”掉了。严格意义上这些只是查看的软件,精度远没达到测试的级别。
显然,1000Hz回报率发生空包的概率比125Hz回报率大得多,低DPI发生的概率比高DPI大得多(和Hz成正比,和DPI成反比)。再加上人的手就这么点移动速度,又不能保证“匀速直线运动”,大家也不会拼命得拿着鼠标划动,再加上即使现在激光鼠标5000的DPI,又有几个用这么高呢?所以1000Hz下空包多的数都数不清(当然其中也可能有真的回报率不稳定的数据包)。 |
|