围绕阻塞阅读的线程

时间:2012-03-12 05:46:36

标签: ruby linux multithreading joystick

我在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上运行?或者是否有一种完全不同的方式来接近这个更好?

1 个答案:

答案 0 :(得分:0)

我需要使用rb_thread_blocking_region在C扩展中进行读取调用。现在完美运作!

相关问题