2008-11-24 7 views
6

Estoy escribiendo un juego de memoria simple usando ruby ​​+ qt (tratando de alejarse de C++ para mientras ...)
Para permitir un segundo tiempo de espera de X para ver dos piezas abiertas, necesito cualquiera temporizadores o hacer el trabajo en un hilo de fondo.Subprocesos de trabajo en Ruby

¿Cuál es la forma más simple de implementar esto sin reinventar la rueda?
¿Hilos de rubí? Qt hilos? Qt temporizadores?

Respuesta

2

La decisión de elegir subprocesos/temporizadores QT o Ruby es probablemente personal, pero debe recordar que los hilos Ruby son verdes. Esto significa que están implementados por el intérprete de Ruby y no pueden escalar a través de múltiples núcleos de procesador. Sin embargo, para un simple juego de memoria con un temporizador, supongo que probablemente no tengas que preocuparte por eso.

Aunque no está relacionado, Midiator, una interfaz de Ruby para dispositivos MIDI usa Ruby threads to implement a timer.

Además, eche un vistazo a Leslie Viljoen's article, él dice que los hilos de Ruby se bloquean cuando los widgets de formularios QT están esperando la entrada. También proporciona algunos ejemplos de código para implementar temporizadores QT (que parecen bastante fáciles y apropiados para lo que estás haciendo).

0

Gracias.

Resuelto usando QTimer :: singleShot. Suficiente: en mi caso, dispara un temporizador de una vez cada vez que se muestran dos mosaicos.

4

No sé si es la mejor solución, pero:

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) 

Hace hilos rubí funcionan! Ajuste el inicio (x) para sus necesidades.

+0

Esto me va a ser muy útil ... +1 – mydoghasworms

Cuestiones relacionadas