qt在线程run中开定时器
时间: 2024-05-08 07:10:57 浏览: 106
基于QT的多线程定时器
在Qt中,在线程的run()方法中开启定时器有两种常见的方法。第一种方法是通过子类化QThread,在子类中定义一个定时器,并在run()方法中调用定时器的start()方法。具体代码如下:
```cpp
// 在子类中定义定时器
class TestThread : public QThread
{
Q_OBJECT
public:
explicit TestThread(QObject *parent = nullptr) : QThread(parent)
{
m_pTimer = new QTimer(this);
connect(m_pTimer, &QTimer::timeout, this, &TestThread::timeoutSlot);
}
protected:
void run() override
{
m_pTimer->start(1000);
}
private slots:
void timeoutSlot()
{
qDebug() << "当前线程id:" << QThread::currentThread();
}
private:
QTimer *m_pTimer;
};
// 在主线程中启动子线程
TestThread *thread = new TestThread();
thread->start();
```
第二种方法是无需子类化线程类,可以通过信号槽机制将定时器移动到线程中,并在信号槽连接中启动定时器。具体代码如下:
```cpp
// 在主线程中创建线程和定时器
QThread *m_pThread = new QThread();
QTimer *m_pTimer = new QTimer();
m_pTimer->moveToThread(m_pThread);
m_pTimer->setInterval(1000);
connect(m_pThread, SIGNAL(started()), m_pTimer, SLOT(start()));
connect(m_pTimer, &QTimer::timeout, this, &ThreadTest::timeOutSlot, Qt::DirectConnection);
// 启动线程
m_pThread->start();
```
阅读全文