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

时间:2015-05-29 17:59:52

标签: c++ qt qt5 qthread

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

我有一个类Framework和一个名称DeviceMngr。

framework.h的定义如下:

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

框架由main初始化。我的主要是:

  QApplication app(argc, argv);

  QThread FrameWorkThread;

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

之后,主要是主Windows,并将DeviceFramework作为参数。

MainUI MyWindows(*DeviceFramework);

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

基于框架是使用类DeviceMngr和methode访问Android设备。

如何在与框架相同的线程中添加DeviceMngr是可能的。

我可以在framework.cpp中执行类似的操作:

Framework::Framework()
{

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

}

设备管理器声明如下:

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

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

由于 的Sebastien

1 个答案:

答案 0 :(得分:0)

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

您是否有理由不让您的DeviceMngr实例成为Framework的子代? 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);
}