睡眠()或睡眠()有多准确

use*_*241 3 c winapi sleep windows-xp-sp3

我正在尝试模拟按键和按键动作.

例如:2638毫秒.

SendMessage(hWnd, WM_KEYDOWN, keyCode, 0);
Sleep(2638);
SendMessage(hWnd, WM_KEYUP, keyCode, 0);
Run Code Online (Sandbox Code Playgroud)

你怎么知道它真的有用吗?

cdh*_*wie 5

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

要了解您的问题标题提出的问题(您应该一次提出一个问题......)所述功能的准确性由操作系统决定.在Linux上,系统时钟粒度为10ms,因此通过nanosleep()的定时进程暂停仅保证精确到10ms,即使这样,也不能保证在指定的时间内完全休眠.(见下文.)

在Windows上,可以更改时钟粒度以适应电源管理需求(例如,降低粒度以节省电池电量).有关Sleep功能,请参阅MSDN的文档.

请注意,对于Sleep()/ nanosleep(),操作系统仅保证进程暂停将至少持续您指定的时间.执行其他进程总是可以延迟恢复进程.

因此,上面的代码发送的按键事件将比按键事件发送至少2.638秒,而不是更快的毫秒.但事件有可能在2.7秒,2.8秒甚至3秒后发送.(或者,如果实时进程占用了CPU并且在一段时间内没有放弃控制,那么很久以后.)

  • "操作系统仅保证过程暂停将持续至少与您指定的时间一样长." 在Windows上,这实际上并非如此.从您发布的MSDN链接:"线程可能会睡眠时间少于指定的时间长度". (5认同)