我在我的应用程序中尝试使用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
答案 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);
}