我有两个来自不同类别的对象:“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()”无效。 谁能解释我为什么? 谢谢你, 阿莱西亚
最佳答案
你有几个问题:
QThread
和daqSlave
实例超出范围。使用new
并为线程提供一个父对象。moveToThread()
自动将 daqSlv 重新设置为线程的父级,因此这不是问题。doSetup()
函数在您将 worker 移动到线程之前被调用。在调用QObject::connect()
时指定Qt::QueuedConnection
以解决此问题。
关于c++ - Qt线程不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326861/