Sleep() 或 sleep() 的准确度如何

2023-12-07

我正在尝试模拟按下键和按下键的动作。

例如:2638 毫秒。

SendMessage(hWnd, WM_KEYDOWN, keyCode, 0);
Sleep(2638);
SendMessage(hWnd, WM_KEYUP, keyCode, 0);

你怎么知道它是否真的有效?


您不会使用此代码,因为准确测量代码执行所需的时间是一项艰巨的任务。

为了解决您的问题标题提出的问题(您实际上应该一次问一个问题......),所述功能的准确性由操作系统决定。在 Linux 上,系统时钟粒度为 10 毫秒,因此通过 nanosleep() 进行的定时进程挂起只能保证精确到 10 毫秒,即使如此,也不能保证在您指定的时间精确休眠。 (见下文。)

在 Windows 上,可以更改时钟粒度以适应电源管理需求(例如,降低粒度以节省电池电量)。看MSDN 关于 Sleep 函数的文档.

请注意,使用 Sleep()/nanosleep() 时,操作系统仅保证进程挂起持续时间at least只要你指定。其他进程的执行总是会延迟您的进程的恢复。

因此,上面的代码发送的按键事件将比按键事件晚至少 2.638 秒发送,而不是早一毫秒。但事件也有可能晚 2.7 秒、2.8 秒甚至 3 秒发送。 (或者,如果实时进程抓住了 CPU 并且在一段时间内没有放弃控制权,则要晚得多。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sleep() 或 sleep() 的准确度如何 的相关文章

随机推荐