2009-09-17 6 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

答えて

10

あなたはQtConcurrentとQObjectを継承せずにマルチスレッドを使用することができます::ラン():

QFuture QtConcurrent ::実行(関数function、...)別のスレッドで
ラン機能。スレッドはグローバル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

3

QThread自体はQObjectから派生したものです。そのrunメソッドをオーバーライドして使用する必要があるため、QThreadを使用するにはQObjectから継承する必要があります。

なぜQObjectから継承したくないのですか?

2

QThreadを継承したくない場合は、QThreadを継承するラッパーを作ってオブジェクトを引数として取ることができます。 IRunnableインターフェイス(スレッドクラスが継承するようにします)を使用します。

関連する問題