是否可以在不继承任何Qt对象的情况下使用Qt线程?

时间:2009-09-17 08:16:14

标签: c++ qt multithreading

在qt文档中演示启用线程的唯一方法是继承QThread,然后覆盖其run()方法。

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对象继承?

3 个答案:

答案 0 :(得分:10)

您可以使用多线程而无需使用QtConcurrent :: run()继承QObject:

  

QFuture QtConcurrent :: run(功能函数,......)
  在单独的线程中运行函数。该线程取自全局QThreadPool。请注意,该功能可能无法立即运行;该函数仅在线程可用时运行。

答案 1 :(得分:3)

QThread本身源自QObject。您需要覆盖其run方法才能使用它,因此您必须从QObject继承才能使用QThread。

为什么不想继承QObject?

答案 2 :(得分:2)

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