我正在尝试在我的应用程序中添加线程,用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实例的子线程的线程关联做了如下说明:
http://doc.qt.io/qt-5/threads-qobject.htmlQObject::moveToThread()函数改变线程的关联对象及其子对象(如果对象有父)。
这将是在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);
}