我在Ruby上使用Ruby扩展在Ruby上做一些操纵杆编程,它包含了joystick.h的基本功能。默认情况下,获取操纵杆事件是阻止读取,但我不希望这会中断游戏循环。
目前,我通过对操纵杆进行非阻塞调用并在非常快速的循环中运行它来解决它。这有效,但它也使脚本使用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上运行?或者是否有一种完全不同的方式来接近这个更好?
答案 0 :(得分:0)
我需要使用rb_thread_blocking_region
在C扩展中进行读取调用。现在完美运作!