我正在使用ruby + qt编写一个简单的记忆游戏(试图远离c ++ ...) 为了允许X秒超时来查看两个打开的片段,我需要定时器或在后台线程中完成工作。
在不重新发明轮子的情况下实施此操作的最简单方法是什么? Ruby线程? Qt线程? Qt计时器?
答案 0 :(得分: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)。
答案 1 :(得分:2)
选择QT线程/定时器或Ruby的决定可能是个人的,但你应该记住Ruby线程是绿色的。这意味着它们由Ruby解释器实现,无法跨多个处理器核心扩展。虽然,对于一个带计时器的简单记忆游戏,我猜你可能不需要担心。
虽然有些不相关,Midiator,MIDI设备的Ruby界面使用Ruby threads to implement a timer。
另外,看看Leslie Viljoen's article,他说当QT表单小部件等待输入时,Ruby的线程会锁定。他还提供了一些示例代码来实现QT计时器(看起来非常简单,适合你正在做的事情)。
答案 2 :(得分:0)
感谢。
使用QTimer :: singleShot解决它。 足够 - 在我的情况下,每次显示两个图块时都会触发一次计时器。