gpt4 book ai didi

Java inputevents 在 linux 中有一段时间没有触发(java/xorg 问题??)

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:04 25 4
gpt4 key购买 nike

我正在用 Java 编写一个 2D 游戏,我遇到了输入事件(鼠标、键盘)没有在应该触发的时候触发的问题。它在 win2k 和 xp 中按预期工作。

因为这是一个游戏,所以我有一个主循环

  1. 合并输入事件(填充缓冲状态的各种监听器)
  2. 推进现场
  3. 渲染场景
  4. 必要时等待以保持稳定的帧速率( hibernate )
  5. 交换缓冲区

场景的渲染对 java2D 的影响很大——它使用 BufferStrategy 并大量使用 drawImage() 的非缩放变体。帧率暂时被人为锁定在 60fps 左右。

在任何鼠标或键盘事件发生与 JVM 拾取它之间似乎存在延迟(偶尔长达几秒)——最初我认为这可能是事件调度线程没有获得足够的时间(尽管帧率 sleep )- 我通过添加一个包含帧标记的自定义事件来测试它,并在帧结束时等待它,但它会在预期时触发(- 它应该只在所有其他先前事件都被触发后才这样做,这对我来说是一个 x -windows-to-jdk 问题,而不是 jdk 内部问题?)

特别奇怪的是,如果 java 以 +19 的​​ nice 运行(因此 降低 优先级......),它可以得到缓解。如果我有一个人口更多的场景,它似乎也会变得更糟 - 运行 top 显示 Xorg(而不是 java)占用了大约 80% 的 CPU,我怀疑这与它有关......

我也试过修改线程优先级,但没有明显区别......

我完全被这个问题难住了——有没有其他人看到过类似的行为,如果有,你是如何纠正它的?我是不是找错树了??

我正在运行 1.6.0 OpenJDK 和 fedora 11。

抱歉冗长,提前致谢!

最佳答案

我只是尝试将 Xorg 重新调整为 -19(所以它是实时的),问题就消失了......

我猜 java 通过 Xorg 渲染大量像素图会导致 X 本身占用 CPU,因此受到调度程序的惩罚而没有时间处理事件?奇怪。

关于Java inputevents 在 linux 中有一段时间没有触发(java/xorg 问题??),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1619492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com