Возможно ли использовать многопоточность Qt без наследования какого-либо объекта Qt? - PullRequest
6 голосов
/ 17 сентября 2009

Единственный способ включить многопоточность, продемонстрированный в документации 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 ]

10 голосов
/ 17 сентября 2009

Вы можете использовать многопоточность без наследования от QObject с QtConcurrent :: run ():

QFuture QtConcurrent :: run (Функция-функция, ...)
Запускает функцию в отдельном потоке. Поток взят из глобального QThreadPool. Обратите внимание, что функция может работать не сразу; функция будет выполняться только при наличии потока.

3 голосов
/ 17 сентября 2009

Сам QThread является производным от QObject. Вам нужно переопределить его метод run, чтобы использовать его, поэтому вы должны наследовать от QObject, чтобы использовать QThread.

Почему вы не хотите наследовать от QObject?

2 голосов
/ 17 сентября 2009

Если вы не хотите наследовать QThread, вы можете создать оболочку, которая наследует QThread и принимает ваши объекты как аргумент, например через интерфейс IRunnable (который вы создаете и позволяете вашим классам потоков наследоваться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...