Página 1 de 1

Usar Trheads y BGE al tiempo.

Publicado: Mar Ago 28, 2012 6:35 am
por robertsauri
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()

Re: Usar Threads y BGE al tiempo.

Publicado: Mié Ago 29, 2012 7:24 am
por robertsauri
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!