2009-09-17 7 views
6

La única forma de habilitar el subprocesamiento demostrado en la documentación de qt es heredando QThread y luego reemplazando su método run().¿Es posible usar el subproceso Qt sin heredar ningún objeto Qt?

class MyThread : public QThread 
{ 
public: 
    void run(); 
}; 

void MyThread::run() 
{ 
    QTcpSocket socket; 
    // connect QTcpSocket's signals somewhere meaningful 
    ... 
    socket.connectToHost(hostName, portNumber); 
    exec(); 
} 

Me pregunto si hay alguna forma de usar hilo qt sin heredar de cualquier objeto qt?

+0

El Qt doc y las respuestas están obsoletas. Qt recomienda encarecidamente otra forma de utilizar QThread ahora: http://doc.qt.io/qt-5/qthread.html – ymoreau

Respuesta

10

Puede utilizar múltiples hilos sin heredar de QObject con QtConcurrent :: run():

QFuture QtConcurrent :: run (función de función, ...)
Se ejecuta la función en un hilo separado. El hilo está tomado del QThreadPool global. Tenga en cuenta que la función puede no ejecutarse inmediatamente; la función solo se ejecutará cuando haya un hilo disponible.

+0

Sé que este es un hilo antiguo, pero la gente podría terminar aquí, así que creo que vale la pena mencionar los siguientes enlaces : - http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/ - http://woboq.com/blog/qthread-you-were- not-doing-so-wrong.html - http://qt-project.org/wiki/Threads_Events_QObjects – x29a

3

QThread se deriva de QObject. Debe sobrescribir su método de ejecución para usarlo, por lo tanto, debe heredar de QObject para usar QThread.

¿Por qué no desea heredar de QObject?

2

Si no desea heredar QThread, puede crear un contenedor que herede QThread y tome sus objetos como argumento, p. a través de una interfaz IRunnable (que puedes hacer y dejar que tus clases de subprocesos hereden).