【发布时间】:2014-03-11 13:16:39
【问题描述】:
我有两个来自不同类的对象:“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()”无效。 谁能解释我为什么? 谢谢, 阿莱西亚
【问题讨论】:
-
你的类型
daqSlave是否继承自QObject? -
你把
daqThread初始化放在哪里了?您是否知道一旦控制流离开该块,daqThread将被破坏? -
什么是
QThreadEx?您是否在daqSlave类中使用了“Q_OBJECT”宏。 -
请注意,子类化 QThread(您似乎正在这样做)通常是在 Qt 中执行线程的错误方法。 QThread 是一个线程控制器/管理器,子类化它很容易导致代码在错误的操作系统线程中运行。如果您不知道这种情况如何发生以及如何避免它,请不要继承 QThread ;)
标签: c++ multithreading qt qthread