Usar Trheads y BGE al tiempo.

Preguntas y respuestas relacionadas con el desarrollo de videojuegos y aplicaciones 3D interactivas, usando Blender Game Engine.
Responder
robertsauri
Mensajes: 5
Registrado: Lun Dic 26, 2011 2:16 pm
Nombre:

Usar Trheads y BGE al tiempo.

Mensaje por robertsauri » Mar Ago 28, 2012 6:35 am

Estoy haciendo un script en el que necesito usar trheads para una conexión con un servidor. En python funciona perfectamente, pero al ejecutarlo en BGE los trheads se detienen. ¿Alguna solución?

Código: Seleccionar todo

import threading

def func1():
    while 1:
        print(\"Thread 1\")
def func2():
    while 2:        
        print(\"Thread 2\")

Thr1 = threading.Thread(target = func1)
Thr1.start()
Thr2 = threading.Thread(target = func2)
Thr2.start()

robertsauri
Mensajes: 5
Registrado: Lun Dic 26, 2011 2:16 pm
Nombre:

Re: Usar Threads y BGE al tiempo.

Mensaje por robertsauri » Mié Ago 29, 2012 7:24 am

Joder, no se porque pero siempre suelo encontrar la respuesta yo solo antes de que alguien lo responda...

En fin, aquí el problema estaba en que una vez finalizaba el script también finalizaban los threads. No se porque, teóricamente los threads son hilos independientes, pero es así.

Total, que lo único que tenias que hacer era que el always del script hiciese bucle. Y poner un if, para que el script siempre estuviese activo pero los threads solo se declararan una vez. En fin, esto:

Código: Seleccionar todo

import bge
import threading

def func1():
    while 1:
        print(\"Thread 1\")
def func2():
    while 2:        
        print(\"Thread 2\")

Ones = bge.logic.getCurrentController().owner[\"Ones\"]

if Ones == False:
    Thr1 = threading.Thread(target = func1)
    Thr1.start()
    Thr2 = threading.Thread(target = func2)
    Thr2.start()
    Ones == True
Hay una propiedad además booleana. Eso es para que solo se ejecute el codigo la primer vez. Se podria hacer tambien con una variable global en otro script pero eso ya seria complicar mucho el rollo.

Ahora solo hace falta hacer algo para que cuando se detenga el BGE tambien lo hagan los thread, pero ya se me ocurrira argo. Saludos!

Responder