Qt线程不起作用

时间:2014-03-11 13:16:40

标签: c++ multithreading qt qthread

我有两个来自不同类的对象:“master”和“slave”。 我试图在master.cpp中创建一个线程,我已经声明了从属对象。 问题是线程没有启动

QThreadEx daqThread;
daqSlave daqslv;
daqslv.doSetup(daqThread);
daqslv.moveToThread(&daqThread);
daqThread.start(QThread::NormalPriority);

其中:doSetup()是:

 void daqSlave::doSetup(QThreadEx &cThread) const
{
   qDebug()<<"daqSlave::doSetup()-begin";
   QObject::connect(&cThread, SIGNAL(started()),
                     this, SLOT(avvio()));
   qDebug()<<"daqSlave::doSetup()-end";
 }

“doSetup()”有效但“avvio()”却没有。 谁能解释我为什么? 谢谢, 阿莱西娅

1 个答案:

答案 0 :(得分:0)

您有几个问题:

  • QThreaddaqSlave个实例超出了范围。使用new并为线程提供父对象。 moveToThread()自动将daqSlv重新托管给线程,因此这不是问题。
  • 在将工作人员移动到线程之前调用doSetup()函数。指定Qt::QueuedConnection在致电QObject::connect()以解决此问题。