我正在使用包含 joystick.h 基本功能的 Ruby 扩展在 Linux 上的 Ruby 中进行一些操纵杆编程。默认情况下,获取操纵杆事件是阻塞读取,但我不希望它中断游戏循环。
目前,我正在通过对操纵杆进行非阻塞调用并以非常快的循环运行它来绕过它。这行得通,但它也使脚本使用 100% CPU,因为我希望操纵杆事件尽可能接近实时。
我正在尝试做类似的事情
input = Thread.new do
while e = joystick.event
@event = e
end
end
main = Thread.new do
while true
sleep 0.1
puts @event
end
end
但即便如此,joystick.event
调用也会阻塞主线程。我是否完全误解了 Ruby 线程的工作方式,或者操纵杆在 Linux 上的工作方式?还是有一种完全不同的方法可以更好地解决这个问题?