QT 主线程子线程互相传值
本文实现了主线程给子线程传值、子线程给主线程传值。主线程子线程的互相传值。线程源文件mythread.h、.cpp;主线程文件mainwindow.h、.cpp;下面程序先从主线程调用子线程,子线程给主线程返回1;主线程再给子线程发送带参信号子线程打印收到的信号。
本文作者原创,转载请附上文章出处与本文链接。
线程源文件mythread.h、.cpp;主线程文件mainwindow.h、.cpp;
下面程序先从主线程调用子线程,子线程给主线程返回1;主线程再给子线程发送带参信号子线程打印收到的信号。
mythread.h
class mythread : public QThread
{Q_OBJECT
public:mythread();//QThread的虚函数//线程处理函数//不能直接调用,通过start()间接调用void run();
signals:void isDone(int); //处理完成信号public slots://接收主线程的消息void recMegFromMain(QString);
};
mythread.cpp
mythread::mythread()
{}
void mythread::run()
{emit isDone(1); //发送完成信号
}
void mythread::recMegFromMain(QString str)
{qDebug()<< "子线程接收到" <<str;
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "mythread.h"
#include <QDebug>
#include <QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = nullptr);~MainWindow();//接收子线程槽函数void receiveMsgFromThread(int);//子线程发射信号槽函数void sengMsgToThreadBtn();//分配空间
private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();private:Ui::MainWindow *ui;mythread *thread;signals://给子线程发消息void sengMsgToThread(QString);
};
#endif // MAINWINDOW_H
mainwindow.cpp
//构造函数部分
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);thread = new mythread; //分配空间consumer = new WriterThread; //分配空间writer = new Consumer;//关闭界面时,杀死线程connect(this, &MainWindow::destroyed, this, &MainWindow::dealDone);//接收子线程发来的数据connect(thread, &mythread::isDone, this, &MainWindow::receiveMsgFromThread);//发数据给子线程connect(this, &MainWindow::sengMsgToThread, thread, &mythread::recMegFromMain);
}//主线程调用函数,触发信号给子线程发消息
void MainWindow::on_pushButton_clicked()
{sengMsgToThreadBtn();}
//给子线程发信号和参数
void MainWindow::sengMsgToThreadBtn()
{emit sengMsgToThread("hello");
}//接收子线程函数
void MainWindow::receiveMsgFromThread(int i)
{QString str = QString::number(i);qDebug()<<str;
}//启动线程
void MainWindow::on_pushButton_2_clicked()
{thread->start();//启动线程,处理数据ui->label->setText("线程启动");}
//停止线程调用
void MainWindow::dealDone()
{ui->label->setText("线程停止");//停止线程thread->quit();//consumer->quit();//writer->quit();//等待线程处理完手头工作thread->wait();//consumer->wait();//writer->wait();ui->pushButton_2->setEnabled(true);ui->pushButton->setEnabled(false);}
以下文章均为作者原创文章,看完记得收藏、关注加
QT 主线程子线程互相传值相关推荐
- 【EventBus】事件通信框架 ( 发送事件 | 判断发布线程是否是主线程 | 子线程切换主线程 | 主线程切换子线程 )
文章目录 前言 一.根据不同的线程模式进行不同的线程切换操作 二.完整代码示例 前言 发布线程发布事件之后 , 消息中心需要转发这些事件 , 并执行相应的订阅方法 ; 在转发的过程中 , 需要针对订阅 ...
- python threading-单线程 多线程 主线程 子线程 setDeamon join
python threading-单线程 多线程 主线程 子线程 setDeamon join 单线程 多线程 主线程和子线程 setDaemon() join() 测试多线程下程序运行的时间 创建多 ...
- 【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )
文章目录 一.判定当前线程是否是主线程 二.子线程中执行主线程方法 三.主线程中执行子线程方法 一.判定当前线程是否是主线程 在 Android 中 , 如果要判定当前线程是否是主线程 , 可以使用如 ...
- Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作
前言:通常,我们写的公共的模块给别人用,但是这个模块又必须在特定的线程中执行. 比如,一个加载网络图片的的方法,需要在子线程中执行. /** * 加载网络图片 */ private void load ...
- Android 主线程子线程执行关系
Android 切换线程的方式[我常用的] 1. Handler.post[切换至主线程] 2. new Thread().start()[切换至子线程] 3. 线程池 ThreadP ...
- 多线程经典问题1——主线程子线程交替问题
提出问题: * 子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次.如此循环50次. 分析:这个实际上是非常easy的问题.即子线程r ...
- linux_主线程子线程退出关系
我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下. 1. 主线程等待新线程先结束退出,主线程后退出.正常执行. 实例代码: #include &q ...
- 主线程 子线程死掉_当线程死时,子进程也会死
我有一个程序可以触发Python计时器来生成子进程.一旦程序终止或终止,这些子进程就应该终止.为了做到这一点,我使用了"prctl hack",它设置了一旦父对象死亡,子对象应该接 ...
- android 主线程调用,Android 主线程和线程之间相互发送消息
通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...
最新文章
- VGG卷积神经网络模型加载与运行
- Linux 软件安装与卸载之获取程序包的途径
- 第一次团队作业——团队展示
- POJ - 3415 Common Substrings(长度不小于K的公共子串个数)
- 编程不需要天赋和激情
- 分享一份软件测试面试指南
- 2022新UI聚合支付系统四方源码下载+升级修复漏洞完美版
- html5鲜花网页代码,JS制作漂亮的鲜花完整代码
- unity应用开发实战案例_Unity AR增强现实开发实战
- spark Hash Shuffle内幕彻底解密
- win10开启自带移动热点以及解决无法设置移动热点,请打开WLAN问题
- 宽带换了新的账号怎么连接服务器地址,宽带换了路由器设置步骤图解
- LaTex 自动生成IEEE格式的参考文献
- 潇潇日暮时,掠水鸳鸯散。(01背包
- 重装win7系统后打开截图工具显示“截图工具当前未在计算机上运行”怎么办
- 关于 Dota Rdsp 计算器的编写(一)
- 2020.5.12第一次博客
- 指针:const与指针
- Bribe the Prisoners(2009 Round 1C C)
- tomcat的启动流程及原理
热门文章
- 微信点击按钮关闭当前页面回到微信对话窗口
- PAT 甲级 1018 Public Bike Management
- 学编程难吗?多久能入门?
- 服务器系统如何克隆,服务器如何克隆操作系统
- 暴走英雄坛计算机在线,暴走英雄坛计算器
- callee、caller、call、apply、bind这些方法的含义和使用
- 全国计算机等级考试-三级信息安全考试知识点(无顺序)
- 计算机自主招生证书,高校自主招生必备常识:五大学科竞赛证书含金量
- mysql 查询结果取别名_mysql合并查询结果及为表和字段取别名
- java计算乘地铁费用_Java_地铁购票系统