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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年05月03日 02时50分06秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
区别数据结构中的堆栈与内存中的堆栈的个人总结【转】
2019-05-02
c++中冒号(:)和双冒号(::)的用法【转】
2019-05-02
谭浩强《C++面向对象程序设计》知识点总结
2019-05-02
Android深入浅出之Binder机制
2019-05-02
linux查看硬件信息
2019-05-02
linux支持大于4G内存
2019-05-02
WM_GETINFO相关
2019-05-02
[收藏] FC交换机基础知识详解
2019-05-02
Linux调试工具
2019-05-02
用Eclipse和GDB构建ARM交叉编译和在线调试环境
2019-05-02
GDB命令大全
2019-05-02
IT行业培训必读:优秀程序员的十个习惯
2019-05-02
财务分析与决策:同型分析
2019-05-02
【语言-c#】C# 超级整数计算
2019-05-02
【软件-Doxgen】工具:程序代码生成xml文档(doxgen)
2019-05-02
【语言-c#】C# 注释详细介绍说明
2019-05-02