2009-09-17 5 views
6

L'unico modo per abilitare il thread dimostrato nella documentazione qt è l'ereditare QThread e quindi sovrascrivere il suo metodo run().È possibile utilizzare il threading Qt senza ereditare alcun oggetto Qt?

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

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

Mi chiedo se non v'è alcun modo per utilizzare filo qt senza mai ereditare da oggetti QT?

+0

Il documento Qt e le risposte sono obsolete. Qt incoraggia fortemente un altro modo di usare QThread ora: http://doc.qt.io/qt-5/qthread.html – ymoreau

risposta

10

È possibile utilizzare il multithreading senza ereditare da QObject con QtConcurrent :: run():

QFuture QtConcurrent :: run (la funzione di funzione, ...)
Runs funzione in un thread separato. Il thread è preso dal QThreadPool globale. Si noti che la funzione potrebbe non essere eseguita immediatamente; la funzione verrà eseguita solo quando un thread è disponibile.

+0

So che questo è un thread antico ma le persone potrebbero finire qui, quindi penso che valga la pena menzionare i seguenti link : - 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 stesso deriva da QObject. È necessario sovrascrivere il metodo di esecuzione per utilizzarlo, pertanto è necessario ereditare da QObject per poter utilizzare QThread.

Perché non si desidera ereditare da QObject?

2

Se non si desidera ereditare QThread, è possibile creare un wrapper che eredita QThread e prende gli oggetti come argomento, ad es. attraverso un'interfaccia IRunnable (che fai e lascia ereditare le tue classi thread).

Problemi correlati