QThread
のサブクラス化が悪い考えであり、QThread
を適切に使用して、moveToThread
メソッドを呼び出す理由について、多くの記事を読んだことがあります。 Hereこのような設計の典型的な例を見ることができます。QThreadオブジェクトをワーカークラスのメンバとして
私は、次の要件を満たす必要が設計していますクラス:
それはシグナルとスロットを使いたいので、私はイベントループが必要になりますし、
moveToThread
を使用します。信号とスロットのみのインターフェイスが公開されます。通常のC++メソッドはありません。
すべてのスロットは、オブジェクトの専用スレッドで実行する必要があります。オブジェクトごとに1スレッドです。したがって、オブジェクトが作成されるとスレッドが作成され、オブジェクトが終了すると終了する必要があります。
このように明らかな解決策は、(ちょうどスケッチコードをテストしていません)頭に浮かぶ:だからポイントは、労働者階級の(プライベート)メンバーとしてQThread
オブジェクトを宣言することです
class Worker : public QObject {
Q_OBJECT
public:
Worker() {
thread = new QThread();
// ...Some signal-slot connections may be done here...
// ...Some other connections may be performed by user code...
moveToThread(thread);
thread->start();
}
~Worker() {
thread->exit();
thread->wait();
delete thread;
}
public slots:
void process(); // and other interface slots
signals:
// Interface signals
private:
QThread* thread;
};
が、どのような例や他の人々のコードでもこれまでに見たことはありません。
だから私はこのデザインに欠陥があるのだろうか?私に気づかなかったいくつかの致命的な欠点がありますか?それとも大丈夫ですが、しばしば必要とされることはありませんか?
まず、(unique_ptrなど)のようなRAIIオブジェクトを使用します。第二に、これはおそらくCodeReview SEサイトに適しています。 – OMGtechy
@OMGtechyこれはコードレビューではおそらく閉じられているだろう、著者は "テストされていない、単なるスケッチコード" _と書いてある。コードレビューには実際の作業コードが必要です。参考までに[on-topic](http://codereview.stackexchange.com/help/on-topic)を参照してください。 – Phrancis
@Phrancisああ、その場合は、最初に@Sergeyを持って行くことをお勧めします! – OMGtechy