Yes, this is a FAQ, but I can’t seem to figure out what I am doing wrong. I am 
using the worker pattern of QThread, (as opposed to subclassing), running Qt 
5.15.2. In my controller’s constructor, I have the following code to initialize 
a worker:

worker=new VLCWorker();
worker->moveToThread(&vlcWorkerThread);
worker->initVLC(videoWin);
vlcWorkerThread.start();

The initVLC function, among other things, creates a timer and connects it to a 
slot in the worker:

rtspStartTimer=new QTimer;
rtspStartTimer->setSingleShot(true);
connect(rtspStartTimer, &QTimer::timeout,
        this, &VLCWorker::rtspStarting);


Later, at some point during program execution, I try to start this timer from a 
function in the worker (which itself was triggered by a signal from the main 
thread):

qDebug()<<"*****Trying to start timer which lives in 
thread"<<(long)rtspStartTimer->thread()<<" from thread "<<(long)this->thread();
rtspStartTimer->start(250);
qDebug()<<"*****Timer attempt complete";

Unfortunately, this doesn’t work, giving me the following output:

Debug: 2021-07-18T19:26:12.009 - *****Trying to start timer which lives in 
thread 140235980165688  from thread  140235980165688 
(../DoorBellCamC/vlccontroller.cpp:121, void VLCWorker::rtspStarting())
Warning: 2021-07-18T19:26:12.009 - QObject::startTimer: Timers cannot be 
started from another thread (:0, )
Debug: 2021-07-18T19:26:12.009 - *****Timer attempt complete 
(../DoorBellCamC/vlccontroller.cpp:123, void VLCWorker::rtspStarting())

So even though the output of the debug confirms that the timer lives in the 
same thread I am trying to call start from, I still get the error about “timers 
cannot be started from another thread”. What am I doing wrong?
---
Israel Brewster
Software Engineer
Alaska Volcano Observatory 
Geophysical Institute - UAF 
2156 Koyukuk Drive 
Fairbanks AK 99775-7320
Work: 907-474-5172
cell:  907-328-9145

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to