我正在尝试模拟一个键向下和键向上的动作。
例如: 2638毫秒。
SendMessage(hWnd, WM_KEYDOWN, keyCode, 0);
Sleep(2638);
SendMessage(hWnd, WM_KEYUP, keyCode, 0);你怎么知道它是否真的有效呢?
发布于 2010-11-09 06:48:16
使用这段代码就不会了,因为准确测量代码执行所需的时间是一项困难的任务。
为了得到你的问题标题所提出的问题(你真的应该一次问一个问题……)所述功能的准确性由操作系统规定。在Linux上,系统时钟粒度是10ms,所以通过nanosleep()的定时进程挂起只能保证精确到10ms,即使这样,也不能保证在您指定的时间内完全休眠。(请参见下文。)
在Windows上,可以更改时钟粒度以适应电源管理需求(例如,降低粒度以节省电池电量)。参见MSDN's documentation on the Sleep function。
请注意,使用睡眠()/nanosleep(),操作系统仅保证进程挂起将持续至少您指定的时间。其他进程的执行总是会延迟进程的恢复。
因此,由上面的代码发送的key-up事件将至少比key-down事件延迟2.638秒,而不是早一毫秒。但事件可能会在2.7、2.8甚至3秒后发送。(或者很久以后,如果一个实时进程抢占了CPU,并且在一段时间内没有放弃控制。)
发布于 2010-11-09 06:38:40
Sleep按照标准的Windows线程调度来工作。它的精确度高达20-50毫秒。
所以它对于依赖于用户体验的东西来说是可以的。然而,它绝对不适合实时的东西。
除此之外,还有更好的方法来模拟键盘/鼠标事件。请参阅SendInput。
发布于 2012-07-13 21:45:58
当所请求的延迟小于下一个中断发生前的剩余时间时,sleep()函数将在所需延迟之前返回。但这只表明您想要的睡眠时间比当前系统支持的时间要短。建议将多媒体定时器资源设置为更高的中断频率,以获得观察到的睡眠延迟相对于期望延迟的更好匹配。
以下帖子中的注释:
https://stackoverflow.com/questions/4128766
复制相似问题