2009-09-17 12 views
6

Jedynym sposobem na włączenie wątków w dokumentacji qt jest dziedziczenie QThread, a następnie nadpisanie metody run().Czy można używać wątku Qt bez dziedziczenia jakiegokolwiek obiektu Qt?

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

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

Zastanawiam się, czy istnieje sposób na użycie nici qt bez dziedziczenia z żadnych obiektów qt?

+0

Dokumentacja Qt i odpowiedzi są przestarzałe. Qt zdecydowanie zachęca do innego sposobu używania QThread teraz: http://doc.qt.io/qt-5/qthread.html – ymoreau

Odpowiedz

10

Można użyć wielowątkowość bez dziedziczenie z QObject z QtConcurrent :: run():

QFuture QtConcurrent :: run (funkcyjne, ...)
uruchamia funkcję w osobnym wątku. Wątek pochodzi z globalnego QThreadPool. Zauważ, że funkcja może nie działać natychmiast; funkcja zostanie uruchomiona tylko wtedy, gdy wątek będzie dostępny.

+0

Wiem, że to jest starożytny wątek, ale ludzie mogą tu skończyć, więc myślę, że warto wspomnieć następujące linki : - 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

Sam QThread pochodzi z QObject. Musisz nadpisać jego metodę uruchamiania, aby z niego korzystać, dlatego musisz dziedziczyć z QObject, aby użyć QThread.

Dlaczego nie chcesz odziedziczyć po QObject?

2

Jeśli nie chcesz dziedziczyć QThread, możesz utworzyć opakowanie, które dziedziczy QThread i bierze obiekty jako argument, np. przez interfejs IRunnable (który tworzysz i pozwalasz dziedziczyć klasy wątków).