QObject::startTimer:timerscannotbestartedfrom。。。开始
今天在调试输出⾥看见QObject::startTimer: timers cannot be started from another thread
QTimer类
从Qt的帮助⽂档⾥可以得到他的使⽤⽅法。
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
更多的可以查阅官⽅帮助,本⽂是⼀次多线程的错误使⽤的记录
QTimer类在多线程中的使⽤
⼀次错误的⽰例
于是输出会提醒你->QObject::startTimer: timers cannot be started from another thread
-
-------------------------------------------定时器不能在另⼀个线程⾥被启⽤。
⾸先,每⼀个QObject实例中,接受信号或者事件时,槽函数或者事件处理器将在对象所处的线程中执⾏。
然后,这个定时器是在线程类的构造函数中,我们在主进程中实例创建了⼀个对象,所以定时器是在主进程中的,⽽start()在线程中调⽤,所以会报错。
另⼀些正确的使⽤
1. 在TestThread线程启动后创建定时器
线程在主进程中实例化,他的⼦对象也需要在主进程⾥创建,不能指定定时器的⽗对象为⼦线程。
要使⽤事件循环exec(),否则线程会⽴即结束,并发出finished()信号。
stop()也需要在线程中调⽤。
2. 在主进程中创建,然后使⽤moveToThread()⽅法改变定时器所处的线程,不要给定时器设置⽗类,否则该函数将不会⽣效。
>timeout on t2 timer
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论