6

我正在使用 ruby​​ + qt 编写一个简单的记忆游戏(试图暂时摆脱 c++ ......)
为了允许 X 秒超时查看两个打开的部分,我需要计时器或在后台线程中完成工作.

在不重新发明轮子的情况下实现这一点的最简单方法是什么?
红宝石线程?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 解释器实现,不能跨多个处理器内核扩展。不过,对于一个带有计时器的简单记忆游戏,我猜你可能不需要担心这一点。

虽然有些无关,但 Midiator是 MIDI 设备的 Ruby 接口,它使用Ruby 线程来实现计时器

另外,看看Leslie Viljoen 的文章,他说当 QT 表单小部件等待输入时,Ruby 的线程会锁定。他还提供了一些示例代码来实现 QT 计时器(看起来很简单并且适合您正在做的事情)。

于 2008-11-24T10:58:19.803 回答
0

谢谢。

使用 QTimer::singleShot 解决了它。足够了 - 在我的情况下,每次显示两个瓷砖时都会触发一次计时器。

于 2008-11-25T06:16:44.443 回答