QThread中的一些理解
发布日期:2021-11-15 14:57:55 浏览次数:31 分类:技术文章

本文共 1355 字,大约阅读时间需要 4 分钟。

在子类化线程中,因为线程的依赖性会导致所有除run中运行的函数都会在主线程中运行,如果我们想让这个子类中的所有函数都在子类中运行的话就要改变它的依赖性

class QPlayOnWallThread : public QThread{    Q_OBJECTpublic:    QPlayOnWallThread();    ~QPlayOnWallThread();    void initValue();                //初始化数据    void initWallThread();       //初始化:读配置、读记录    bool wirteRecord();         //缓存记录Q_SIGNALS:    void sendWallInfo(QWallInfo info);    void sendStart();public Q_SLOTS:    void test_slot();    void PlatPreviewOnTvwall_slot(const char * szCameraIndexCode, int iTvWallId, int iWndId); //上墙protected:    virtual void run();         //根据记录上墙private://    bool readRecord();          //读缓存记录    bool readConfig();          //读配置文件private:    bool errorFlag;    QWallInfo m_info;};

 

MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);   test = new QPlayOnWallThread;    test->moveToThread(test);//修改依赖性    test->start();}MainWindow::~MainWindow(){    delete ui;}void MainWindow::on_pushButton_clicked(){    test->PlatPreviewOnTvwall_slot("cc",1,1);}

修改依赖性后就可以使得我们创建的子类中的函数都在子线程中运行。

但是void MainWindow::on_pushButton_clicked()这个函数运行以后你会发现PlatPreviewOnTvwall_slot("cc",1,1)是在主线程中运行的,为什么呢?因为调用PlatPreviewOnTvwall_slot("cc",1,1);这句话是主线程中调用的所以运行也是主线程中运行。

我总结了一点:对于线程类来说想让其在子线程中运行,那么就不要在主程序中调用子线程类中的函数。(前提是修改了它的依赖对象,否则除了run中运行的函数都是在主线程中运行)

不修改依赖性的结果:

修改依赖性的结果:

C++交流群:585225803

转载地址:https://blog.csdn.net/qq_39742146/article/details/84344423 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt中Connect连接函数的特殊用法
下一篇:Qt在QTreeWidget中实现拖动操作

发表评论

最新留言

很好
[***.229.124.182]2024年05月03日 02时50分06秒