【发布时间】:2013-06-06 10:48:47
【问题描述】:
我正在尝试使用 Qt 中的线程将一些工作委派给一个线程,但我无法让它工作。我有一个继承 QMainWindow 的类,它有一个启动线程来工作的成员对象。该对象以 QMainwindow 作为父对象。它包含并初始化另一个 QObject,m_poller,我想将其移至我创建的线程:
m_pollThread = new QThread;
m_poller->moveToThread(m_pollThread);
//Bunch of connection
m_pollThread->start();
我遵循了关于如何在 Qt 中管理线程而不对其进行子类化的指南(又名not doing it wrong),但我仍然在 VS 中收到以下消息:
QObject::moveToThread: 当前线程 (0x2dfa40) 不是对象的线程 (0x120cf5c0)。 无法移动到目标线程 (0x1209b520)
我发现following post 似乎可以处理相同的问题,但无法用答案修复我的代码。我觉得我实际上是在正确调用 moveToThread (因为我没有从另一个线程中调用它来“拉”一个对象),但显然我仍然遗漏了一些东西:正如消息提示的那样,似乎已经有多个线程,我对 moveToThread() 的调用似乎最终出现在错误的线程中(尽管我承认我对此完全陌生,并且可能完全错误地解决这个问题......)
那么我使用 Qt 线程的方式可能还有什么问题呢?
谢谢!
【问题讨论】:
-
能否请您显示创建 m_poller 对象的代码?
标签: c++ multithreading qt