私はしばらくの間Qtを学んでいて、数日前にによってマルチスレッド化を続けることにしましたQThread
。私はこの人をフォローしています。サブクラス化QThread
は適切な方法ではなく、を使用することであると彼は言っているのでQObject
。私は彼の方法に従っています。しかし、彼はから継承する別のクラスを作成しましたQObject
。私はいくつかの変更を加えることにしました:
class myclass
{
private:
dowork();
private slots:
slota();
slotb();
slotc();
}
myclass::dowork()
{
QThread lett;
QThread latt;
QThread pltt;
QObject lethread;
connect(&lett, SIGNAL(started()), this, SLOT(slota()));
lethread.moveToThread(&lett);
QObject lathread;
connect(&latt, SIGNAL(started()), this, SLOT(slotb()));
lathread.moveToThread(&latt);
QObject plthread;
connect(&pltt, SIGNAL(started()), this, SLOT(slotc()));
plthread.moveToThread(&pltt);
lett.start();
latt.start();
pltt.start();/*
lett.wait();
latt.wait();
pltt.wait();*/
while(lett.isRunning())
{
//qDebug() << "Still Running!";
}
lett.quit();
}
プログラムを実行すると、while
ループが無限に実行され続けます。それはまったく出てこない。私qdebug
は3つのスロットの実装内で、スロットが入っているかどうかを確認するために使用しましたが、驚くべきことに、どのスロットも呼び出されません。どうしてこんなことに?のコメントを削除すると.wait
、プログラムが一時停止します。
この方法の何が問題になっていますか?私のプログラムは非常に小さいので、その余分なクラスは避けたいと思います。