Qt线程间共享数据

来源:互联网 发布:linux 参数是引用类型 编辑:程序博客网 时间:2024/05/16 05:36

Qt线程间共享数据

1. 数据共享注意点

像 QString 等这些 Qt 本身定义的类型,直接传送即可。但如果自定义的类型想使用 signal/slot 来传递的话,则不能直接使用。

typedef unsigned short u16;

以 u16 为例:
步骤:
- 在类型定义完之后,加入声明

Q_DECLARE_METATYPE(U16)
  • 在使用函数中注册这种类型:
qRegisterMetaType(u16)("u16")
  • 如果还需使用这种类型的引用或指针,还需注册:
qRegisterMetaType(u16*)("u16*");qRegisterMetaType(u16&)("u16&");

2. Qt 线程

示例:

class WorkerThread : public QThread{    Q_OBJECTpublic:    WorkerThread(u16 *info_orignal, u16 *info_sorting, QObject *parent = Q_NULLPTR);    ~WorkerThread();protected:    void run();signals:    void FinishedSignal(u16 *info_orignal, u16 *info_sorting);private:    u16 *infoOrignal;    u16 *infoSorting};
WorkerThread::WorkerThread(u16 *info_orignal, u16 *info_sorting, QObject *parent): QThread(parent), infoOrignal(info_orignal), infoSorting(info_sorting){}void WorkerThread::run(){    ReadBadBlockInfo(infoOrignal, infoSorting);    emit FinishedSignal(infoOrignal, infoSorting);}
#include <QMetatype>

Q_DECLARE_METATYPE(U16)

void MyObject::StartWorkThread(){    qRegisterMetaType(u16)("u16");    qRegisterMetaType(u16*)("u16*");    u16 *info_orignal = (u16*)malloc(18);    u16 *info_sorting = (u16*)malloc(18);    WorkerThread *workerThread = new WorkerThread(info_orignal, info_sorting, this);    connect(workerThread, &WorkerThread::FinishedSignal, this, &MyObject::HandleREaults);    connect(workerThread, &WorkerThread::finished, this, &QObject::deleteLater);}
原创粉丝点击