qt多线程中使用定时器

参考Qt——线程与定时器_m_ptimer->setinterval-CSDN博客

终于搞懂了定时器起的不是一个线程,而是相当于一个方法调用。

定时器的创建和start的调用要在一个线程中,否则会报错QObject::startTimer: Timers cannot be started from another thread

所以使用就得在子线程的run中去new和start

stop也是同理,否则报错QObject::killTimer: Timers cannot be stopped from another thread

线程中的定时器的槽函数也是主线程,所以stop不能在定时器的槽函数中调用

在子线程run中也不能m_pTimer = new QTimer(this);这样写,因为这样子线程是在主线程中创建的,子线程的QObject子对像也必需在主线程中创建,这就与在子线程中创建冲突了。所以不能加this指定父对像,否则报错

QObject: Cannot create children for a parent that is in a different thread.
(Parent is TestThread(0x709d88), parent's thread is QThread(0x6e8be8), current thread is TestThread(0x709d88)

void TestThread::run()
{
m_pTimer = new QTimer();
m_pTimer->setInterval(1000);
connect(m_pTimer, &QTimer::timeout, this, &TestThread::timeoutSlot);
m_pTimer->start();
this->exec();//这里必需要有,

必须要加上事件循环exec()

否则线程会立即结束,并发出finished()信号。
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值