Я занимаюсь программированием джойстика в Ruby под Linux с использованием расширения 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?Или есть совершенно другой подход к этому, который лучше?