0

我正在使用包含 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 上的工作方式?还是有一种完全不同的方法可以更好地解决这个问题?

4

1 回答 1

0

我需要在 C 扩展中使用rb_thread_blocking_region. 现在完美运行!

于 2012-03-13T04:12:49.030 回答