GUI アプリケーションを作成するために Qt を使用しています。
メイン スレッドは GUI を担当し、オブジェクトを操作するために QThread を作成します。
class Worker
{
void start() {
QTimer* timer = new Timer();
connect(timer,SIGNAL(timeout()),this,SLOT(do()));
}
void do() {
//do some stuff
emit finished();
}
}
class GUI
{
//do some GUI work then call startWorker();
void startWorker() {
QThread* thread = new Thread();
Worker* worker = new Worker();
worker->moveToThread(thread);
connect(thread, SIGNAL(started()), worker, SLOT(start()));
connect(worker, SIGNAL(finished()), workerthread, SLOT(quit()));
connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
}
}
今、私はいくつかの問題を抱えています:
ワーカー クラスのタイマーが機能しません。新しいスレッドにイベントループがないためかもしれませんが、そのようなものを作成する方法がわかりません。私は試した
connect(workerthread, SIGNAL(started()), workerthread, SLOT(exec()));
しかし、それも機能しません。
新しいスレッドで待機しようとすると、シグナルが送信されません
class GUI { void exit() { thread->wait(); } }
イベントループがなく、そのためにシグナルが発せられていないことも原因だと思います。
これらの問題を解決する方法を知っている人はいますか?