2009-09-17 34 views
6

在qt文档中展示线程的唯一方法是继承QThread,然后覆盖它的run()方法。是否可以使用Qt线程而不继承任何Qt对象?

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

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

我不知道是否有任何方式使用qt线程,而不从任何qt对象继承?

+0

Qt文档和答案已过时。 Qt强烈鼓励现在使用QThread的另一种方式:http://doc.qt.io/qt-5/qthread.html – ymoreau 2017-08-23 14:18:07

回答

10

您可以使用多线程不自QObject继承与QtConcurrent :: run()中:

QFuture QtConcurrent ::运行(功能函数,...)在一个单独的线程
奔跑功能。该线程取自全局QThreadPool。请注意,该函数可能不会立即运行;该函数将仅在线程可用时运行。

+0

我知道这是一个古老的主题,但人们可能会在这里结束,所以我认为它值得一提的以下链接: - 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 2013-07-25 14:54:08

3

QThread本身是从QObject派生的。您需要重写它的run方法才能使用它,因此您必须从QObject继承才能使用QThread。

为什么你不想从QObject继承?

2

如果你不希望继承QThread,你可以创建一个继承QThread并将你的对象作为参数的包装器,通过一个IRunnable接口(你可以让你的线程类继承)。