如何在同一个线程中移动类



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

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

framework.h定义如下:

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

框架由main初始化。My Main正在运行:

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

之后,main在其中指定主窗口,并给出DeviceFramework作为参数。

MainUI MyWindows(*DeviceFramework);

我的windows正在与DeviceFramework讨论使用信号/插槽。

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

我怎么可能在同一个线程中添加DeviceMngr而不是框架。

我可以在framework.cpp:

中这样做吗?
Framework::Framework()
{
    Device = new DeviceMngr();
    Device->moveToThread(&FrameWorkThread);
}

设备管理器声明如下:

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

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

谢谢Sebastien

可以将DeviceMngr和Framework实例放在同一个线程中。要做到这一点,您需要将QThread实例保存在一个地方(或者传递一个指针)。

你有理由不让你的DeviceMngr实例成为框架的子实例吗?QObject的文档对QObject实例的子线程的线程关联做了如下说明:

QObject::moveToThread()函数改变线程的关联对象及其子对象(如果对象有父)。

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);
}

相关内容

  • 没有找到相关文章

最新更新