【发布时间】:2024-01-17 01:32:02
【问题描述】:
我正在尝试在工人阶级中使用计时器。这是我的 Worker 类:
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;
};
工人.cpp
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
}
我在新线程中启动这个工作类:
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();
问题是来自Worker::process 的timer 不起作用。我需要以特殊方式在新线程中初始化这个计时器吗?
【问题讨论】:
-
定时器没有启动,调用定时器的start()方法。文档说“要使用它,请创建一个 QTimer,将其 timeout() 信号连接到适当的插槽,然后调用 start()。”看看doc.qt.io/qt-5/qtimer.html
-
forever { ... }实际上是做什么的?我希望它时不时地处理事件。
标签: c++ multithreading qt timer