Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/12/2013, 03:02
edanvar
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Windows: (Not Responding) mientras se ejecuta aplicacion

Gracias por vuestras respuestas!! Estoy intentando entender el tema de las señales desde los threads, pero el problema que estoy teniendo es que al enviar un parametro desde el "main" a uno de los threads para que haga algo con el no funciona, no se si esto es posible, de momento lo que he hecho es esto, por si sirve de ayuda:

Código Python:
Ver original
  1. import sys
  2. from PyQt4.QtCore import *
  3. from PyQt4.QtGui import *
  4. import time
  5.  
  6. class MyThread(QThread):
  7.     def __init__(self, name):
  8.         super(MyThread, self).__init__()
  9.         self.setObjectName(name)
  10.  
  11.     def run(self):
  12.         print "RUN", QThread.currentThread().objectName(), QApplication.instance().thread().objectName()
  13.         self.exec_()
  14.         print "RUN DONE", QThread.currentThread().objectName()
  15.  
  16. class Producer(QObject):
  17.     def __init__(self, parent=None):
  18.         super(Producer, self).__init__(parent)
  19.  
  20.     def Start(self,vector):
  21.         for i in vector:
  22.             if i == 1:
  23.                 self.emit(SIGNAL("testsignal"),1)
  24.                 time.sleep(2)
  25.              else:
  26.                 self.emit(SIGNAL("testsignal"),0)
  27.                 time.sleep(2)
  28.  
  29.         time.sleep(1)
  30.         qApp.quit()
  31.  
  32. class Consumer(QObject):
  33.     def __init__(self, parent=None):
  34.         super(Consumer, self).__init__(parent)
  35.  
  36.     def Consume(self, i):
  37.         print "Value = ",i
  38.  
  39. if __name__ == "__main__":
  40.     vector = [0,1,0,1,1,0,0,1,0]
  41.     app = QApplication([])
  42.     producer = Producer()
  43.     consumer = Consumer()
  44.     QThread.currentThread().setObjectName("MAIN")
  45.     producerThread = MyThread("producer")
  46.     consumerThread = MyThread("consumer")
  47.     producer.moveToThread(producerThread)
  48.     consumer.moveToThread(consumerThread)
  49.     producerThread.started.connect(producer.Start(vector))
  50.     producer.connect(producer, SIGNAL("testsignal"), consumer.Consume)
  51.     def aboutToQuit():
  52.         producerThread.quit()
  53.         consumerThread.quit()
  54.         time.sleep(1)
  55.     qApp.aboutToQuit.connect(aboutToQuit)
  56.     consumerThread.start()
  57.     time.sleep(.1)
  58.     producerThread.start()
  59.     sys.exit(app.exec_())

Y el error que me esta dando

Código Python:
Ver original
  1. Traceback (most recent call last):
  2.   File "<stdin>", line 1, in <module>
  3.   File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
  4.     execfile(filename, namespace)
  5.   File "C:/Users/Desktop/Python Test/toDelete.py", line 56, in <module>
  6.     producerThread.started.connect(producer.Start(vector))
  7. TypeError: connect() slot argument should be a callable or a signal, not 'NoneType'