如何在同一线程中移动 class

How to move class in the same thread

我正在尝试在用 C++ 和 QT 编写的应用程序中添加线程。

我有一个 class 框架和一个名称 DeviceMngr。

framework.h定义如下:

class Framework : public QObject
{
    Q_OBJECT
    QThread FrameWorkThread;
public:
    Framework();

框架由main初始化。我的 Main 正在做 :

  QApplication app(argc, argv);

  QThread FrameWorkThread;

  Framework *DeviceFramework = new Framework;
    DeviceFramework->moveToThread(&FrameWorkThread);
    QObject::connect(&FrameWorkThread, SIGNAL(finished()), DeviceFramework, SLOT(deleteLater()));

之后,其中的 main Windows 并将 DeviceFramework 作为参数。

MainUI MyWindows(*DeviceFramework);

MyWindows 正在使用 Signal/slots 与 DeviceFramework 进行讨论。

基于框架的是使用 class DeviceMngr 和方法访问 android 设备。

我怎么可能在与框架相同的线程中添加 DeviceMngr。

我可以在 framework.cpp:

中做这样的事情吗
Framework::Framework()
{

    Device = new DeviceMngr();
    Device->moveToThread(&FrameWorkThread);

}

设备管理器声明如下:

class DeviceMngr : public QObject
{
    QThread FrameWorkThread;
public:
    DeviceMngr();
    ~DeviceMngr();

这个方法是把框架和设备管理器放在FrameWorkThread中吗?

谢谢 塞巴斯蒂安

您的 DeviceMngr 和 Framework 实例可以在同一个线程中。为此,您需要将您希望它们之间共有的 QThread 实例保存在一个地方(或传递一个指针)。

您是否有理由不让您的 DeviceMngr 实例成为 Framework 的子实例? QObject 的文档说明了以下关于 QObject 实例的子实例的线程亲和性:

The QObject::moveToThread() function changes the thread affinity for an object and its children (the object cannot be moved if it has a parent).

http://doc.qt.io/qt-5/threads-qobject.html

这将是在 FrameWorkThread 上获取两个对象的最简单方法。

main.cpp

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);

  QThread FrameWorkThread;

  Framework *DeviceFramework = new Framework();
  DeviceFramework->moveToThread(&FrameWorkThread);
  QObject::connect(&FrameWorkThread, SIGNAL(finished()), DeviceFramework, SLOT(deleteLater()));
}

framework.hpp

class Framework : public QObject
{
  Q_OBJECT

public:
  Framework();
}

framework.cpp

Framework::Framework()
{
  Device = new DeviceMngr(this);
}