【发布时间】:2018-11-07 16:54:29
【问题描述】:
我有这个代码:
while(MouseKeyboardStateTest.Keyboard.IsKeyDown(Keys.Space))
{
Keyboard.KeyPress(Keys.A);
Thread.Sleep(asChecker.currentDelay);
for (int i = 0; i <= asChecker.currentMouseClicks; i++)
{
Mouse.PressButton(Mouse.MouseKeys.Right);
Thread.Sleep(globalMouseDelay);
}
}
它工作正常,问题是 - Thread.Sleep 不准确,延迟并不总是相同。
有没有其他方法可以解决这个问题,使其至少精确到 10 毫秒?
【问题讨论】:
-
它完全尽可能准确。操作系统线程调度程序仅查找准备好在“心跳”(时钟滴答中断)处运行的线程。它通常每秒滴答 64 次。当您打开浏览器时,往往是 100 次。您不能假设您的线程在睡眠时间到期时实际上获得了处理器,它必须与也需要服务的其他线程竞争。使用 Thread.Priority 可以帮助获得不公平的份额。要保证它将是 10 毫秒而不是 15.625,您需要调用 timeBeginPeriod()。