[Interest] QTimer and QThread
mandeepsandhu.chd at gmail.com
Thu Aug 1 06:36:24 CEST 2013
1) From QTimer documentation:
> *Qt uses the timer's **thread affinity<https://qt-project.org/doc/qt-4.8/qobject.html#thread>
> ** to determine which thread will emit the **timeout()<https://qt-project.org/doc/qt-4.8/qtimer.html#timeout>
> **signal. Because of this, you must start and stop the timer in its
> thread; it is not possible to start a timer from another thread.*
> But you starts timer from source thread. Timer will not starts.
>From the same doc (just the prior sentence):
"In multithreaded applications, you can use QTimer in any thread that has
an event loop. To start an event loop from a non-GUI thread, use
I think the OP's code satisfies the requirements. He has an event loop
running in the QThread and is calling start() from that thread.
> You should use something like:
> screenshot_qtmr = new QTimer;//(this);
> qDebug() << connect(this, SIGNAL(started()), screenshot_qtmr, SLOT(start()));
> qDebug() << connect(screenshot_qtmr, SIGNAL(timeout()), this, SLOT(on_screenshot_timeout()));
> qDebug() << connect(this, SIGNAL(kill_tmr()), screenshot_qtmr, SLOT(stop()));
> //screenshot_qtmr->start(freq*1000); // do not do it
> 2) In you sample on_screenshot_timeout will be executed in main thread,
> maybe you need change
> connect(screenshot_qtmr, SIGNAL(timeout()), this, SLOT(on_screenshot_timeout()));toconnect(screenshot_qtmr, SIGNAL(timeout()), this, SLOT(on_screenshot_timeout()), Qt::DirectConnection);?
DirectConnection will only change in which thread context the slot gets
called, but it should still get called at least (provided the timer is
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Interest