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 に答える