Рабочие темы в рубине

Я пишу простую игру памяти, используя ruby ​​+ qt (пытаясь уйти от C++ на некоторое время...)
Чтобы разрешить второй тайм-аут X для просмотра двух открытых частей, мне нужны либо таймеры, либо работа в фоновом потоке.

Какой самый простой способ реализовать это, не изобретая колесо?
Рубиновые темы? Qt темы? Qt таймеры?

3 ответа

Я не знаю, является ли это лучшим решением, но:

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)

Заставляет работать рубиновые темы! Отрегулируйте начало (х) для ваших нужд.

Решение выбрать потоки / таймеры QT или Ruby, вероятно, является личным, но вы должны помнить, что потоки Ruby имеют зеленый цвет. Это означает, что они реализованы интерпретатором Ruby и не могут масштабироваться на несколько процессорных ядер. Хотя, для простой игры на память с таймером, я думаю, вам не нужно беспокоиться об этом.

Midiator, хотя и несколько не связанный, с интерфейсом Ruby для устройств MIDI использует потоки Ruby для реализации таймера.

Кроме того, посмотрите на статью Лесли Вильоена, он говорит, что потоки Руби блокируются, когда виджеты формы QT ожидают ввода. Он также предоставляет некоторый пример кода для реализации таймеров QT (которые выглядят довольно просто и соответствуют тому, что вы делаете).

Благодарю.

Решил это используя QTimer::singleShot. Достаточно - в моем случае срабатывает таймер каждый раз, когда отображаются две плитки.

Другие вопросы по тегам