私はタイマーをワーカークラスで使用しようとしています。スレッドのスレッドのタイマーQt
QThread *thread = new QThread;
Worker *worker = new Worker;
worker->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), worker, SLOT(process()), Qt::QueuedConnection);
QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
QObject::connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
thread->start();
問題:
void Worker::process(void)
{
qDebug() << "worker process"; //This works
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(test()));
forever
{
}
}
void Worker::test(void)
{
qDebug() << "test123"; //This does not work
}
は、私は新しいスレッドでこのワーカークラスを開始Worker.cpp
Worker.h
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = nullptr);
signals:
void finished(void);
public slots:
void process(void);
void test(void);
private:
QMutex m_mutex;
};
:これは私のワーカークラスですそれはtimer
からWorker::process
までです 動作しません。新しいスレッドでこのタイマーを特別な方法で初期化する必要がありますか?
は、タイマは、タイマの、コールstart()メソッドを起動していません。ドキュメンテーションは、「QTimerを作成し、そのタイムアウト()信号を適切なスロットに接続し、start()を呼び出す」と書いています。 http://doc.qt.io/qt-5/qtimer.htmlを見てください。 – sddk
'forever {...}'は実際に何をしていますか?私はそれが毎日何度もイベントを処理していることを願っています。 –