6
votes

Est-il possible d'utiliser la filetage QT sans hériter d'un objet QT?

Le seul moyen d'activer le threading démontré dans la documentation QT consiste à hériter QTthread, puis remplacez sa méthode de course ().

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

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


1 commentaires

La DOC QT et les réponses sont obsolètes. QT encourage fortement une autre façon d'utiliser QThread maintenant: doc.qt.io/qt-5/ qthread.html


3 Réponses :


3
votes

QThread elle-même est dérivé de QObject. Vous devez remplacer sa méthode d'exécution pour l'utiliser, vous devez donc hériter de QObject afin d'utiliser QThread.

Pourquoi voulez-vous ne pas hériter de qobject?


0 commentaires

10
votes

Vous pouvez utiliser multithreading sans hériter de qObject avec qtconcurrent :: exécution ():

qfuture qtconcurrent :: exécution (fonction fonction, ...)
Fonctionne la fonction dans un fil séparé. Le fil est pris à partir du global QTheadpool. Notez que la fonction peut ne pas fonctionner immédiatement; La fonction ne sera exécutée que lorsqu'un fil est disponible.


1 commentaires

Je sais que c'est un fil antique, mais les gens pourraient se retrouver ici, donc je pense que sa peine de mentionner les liens suivants: - blog.qt.digia.com/blog/2010/06/17/youre-ding-it-wrong - woboq.com/blog/qThread-you-were-not-doing-so-wrong .html - qt-project.org/wiki/threads_events_qobjects



2
votes

Si vous ne souhaitez pas hériter de QThread, vous pouvez faire une emballage qui hérite de qthread et prend vos objets comme argument, par exemple. à travers une interface irournable (que vous faites et laissez vos classes de thread hériter).


0 commentaires