On 31.07.2013 17:01, Alexander Syvak wrote:
Here's the snippet below from implementation of the run method. The class inherits a class inheriting QThread.
...
screenshot_qtmr=newQTimer;//(this);
     screenshot_qtmr->moveToThread(this);
     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);
     anal_qmr  =  new  QTimer;//(this);
     anal_qmr->moveToThread(this);
     qDebug()  <<  connect(anal_qmr,  SIGNAL(timeout()),  
SLOT(on_analize_timeout()));
     qDebug()  <<  connect(this,  SIGNAL(kill_tmr()),  anal_qmr,  SLOT(stop()));
     anal_qmr->start(state_analizer_tmr_interval);
     if  (  !state_analizer_tmr_id  )  return;

     exec();
     while  (  !stop  );

}

Here's an ouput
run() "./13_7_31_10_49_2_974"

"./13_7_31_10_49_2_974 exists"

"./13_7_31_10_49_2_974 has 'write' permission for other"

"./13_7_31_10_49_2_974/S0 directory was created"

true

true

true

true

run() "./13_7_31_10_49_2_974"

"./13_7_31_10_49_2_974 exists"

"./13_7_31_10_49_2_974 has 'write' permission for other"

"./13_7_31_10_49_2_974/S1 directory was created"

true

true

true

true


It never enters those method specified on timeout(). Why?



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

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.
You should use something like:

screenshot_qtmr=newQTimer;//(this);
screenshot_qtmr->setInterval(freq*1000);

screenshot_qtmr->moveToThread(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()));
to
connect(screenshot_qtmr,  SIGNAL(timeout()),  this,  
SLOT(on_screenshot_timeout()), Qt::DirectConnection);
?



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

Reply via email to