c++ - Qt线程不工作

标签 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()”无效。 谁能解释我为什么? 谢谢你, 阿莱西亚

最佳答案

你有几个问题:

  • QThreaddaqSlave 实例超出范围。使用 new 并为线程提供一个父对象。 moveToThread() 自动将 daqSlv 重新设置为线程的父级,因此这不是问题。
  • doSetup() 函数在您将 worker 移动到线程之前被调用。在调用 QObject::connect() 时指定 Qt::QueuedConnection 以解决此问题。

关于c++ - Qt线程不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326861/

相关文章:

c++ - `const` ness、引用和函数调用

multithreading - 如果主线程拥有一个临界区,那么尝试获取该临界区的函数是否会阻塞(如果它也在主线程上)?

c - UNIX 上的进程间通信

qt - 如何强制执行 qmake 库依赖项的顺序?

c++ - 缺少 QtWebKit header + 模块

c++ - 使用 QTextStream 读取正在写入的文件?

c++ - C++ 中的嵌套命名空间

c++ - Good() 和 fail() 的理解

c++ - 如何验证 vector 是否在某个索引处具有值

c# - 在 WPF 中将 BackgroundWorker 与 ProgressBar 结合使用