6

ruby + qt を使用して単純なメモリ ゲームを作成しています (しばらくの間、C++ から離れようとしています...)
X 秒のタイムアウトで 2 つの開いているピースを表示できるようにするには、タイマーが必要か、バックグラウンド スレッドで作業を行う必要があります。 .

車輪を再発明せずにこれを実装する最も簡単な方法は何ですか?
ルビースレッド?Qtスレッド?Qtタイマー?

4

3 に答える 3

4

それが最善の解決策かどうかはわかりませんが:

block=Proc.new{ Thread.pass }
timer=Qt::Timer.new(window)
invoke=Qt::BlockInvocation.new(timer, block, "invoke()")
Qt::Object.connect(timer, SIGNAL("timeout()"), invoke, SLOT("invoke()"))
timer.start(1)

ルビースレッドを機能させます!必要に応じてstart(x)を調整します。

于 2009-02-17T18:25:38.190 に答える
2

QT スレッド/タイマーを選択するか、Ruby スレッドを選択するかはおそらく個人的な決定ですが、Ruby スレッドはグリーンであることを覚えておく必要があります。これは、Ruby インタープリターによって実装され、複数のプロセッサ コア間でスケーリングできないことを意味します。ただし、タイマー付きの単純な記憶ゲームの場合、おそらくそれについて心配する必要はないと思います.

少し関係はありませんが、MIDI デバイスへの Ruby インターフェイスであるMidiatorは、 Ruby スレッドを使用して timer を実装します。

また、Leslie Viljoen の記事を参照してください。QTフォーム ウィジェットが入力を待機しているときに、Ruby のスレッドがロックアップすると彼は述べています。彼はまた、QT タイマーを実装するためのサンプル コードもいくつか提供しています (非常に簡単で、実行している内容に適しているように見えます)。

于 2008-11-24T10:58:19.803 に答える
0

ありがとう。

QTimer::singleShot を使用して解決しました。十分 - 私の場合、2 つのタイルが表示されるたびに 1 回限りのタイマーを起動します。

于 2008-11-25T06:16:44.443 に答える