Thread.sleep() / robot.delay() 更准确?

Posted

技术标签:

【中文标题】Thread.sleep() / robot.delay() 更准确?【英文标题】:Thread.sleep() / robot.delay() more accurate? 【发布时间】:2020-12-18 06:38:42 【问题描述】:

我想使用 Robot 类为在线游戏编写一个机器人。我现在的问题是,方法 Thread.sleep() 或 robot.delay() 不准确。在游戏之外,它们工作得非常好,偏差大约只有 2 - 3 毫秒。但是当游戏处于焦点时,这些方法有+5-+20毫秒甚至更多的偏差。可悲的是,这足以使我的机器人无法使用。有什么方法可以使这些方法更准确吗?或者有没有其他方法可以解决这个问题?

【问题讨论】:

在经过的睡眠时间之后,操作系统的调度程序决定何时启动线程。你不能影响那个。在这种情况下,您可能不想使用 sleep 并以不同的方式暂停。 @akuzminykh 非常感谢您的快速帮助,请问您建议使用哪些不同的方法/方式? @erikcox 很难用这么少的细节和没有代码来回答。 ;-( 一般来说,你不能依赖时间。 【参考方案1】:

没有区别

如果您为 JDK 使用 browse the source,则 Robot.delay() 最终会调用 Thread.sleep()

public void delay(int ms) 
    checkDelayArgument(ms);
    Thread thread = Thread.currentThread();
    if (!thread.isInterrupted()) 
        try 
            Thread.sleep(ms);
         catch (final InterruptedException ignored) 
            thread.interrupt(); // Preserve interrupt status
        
    

你也许可以给 Java 进程一个比游戏更高的优先级,任务在分配给调度程序后可能会更快地执行。

【讨论】:

谢谢你,Matt Clark,顺便问一下,你知道我是如何让我的进程优先于游戏的吗?

以上是关于Thread.sleep() / robot.delay() 更准确?的主要内容,如果未能解决你的问题,请参考以下文章

多线程编程里的thread.sleep问题

timeunit的sleep和thread的sleep有啥区别

为啥 Thread.Sleep 如此有害

JAVA,Thread.sleep()问题

Thread.sleep() 实现

隐藏 Thread.sleep