本文实现了主线程给子线程传值、子线程给主线程传值。主线程子线程的互相传值。线程源文件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 主线程子线程互相传值相关推荐

  1. 【EventBus】事件通信框架 ( 发送事件 | 判断发布线程是否是主线程 | 子线程切换主线程 | 主线程切换子线程 )

    文章目录 前言 一.根据不同的线程模式进行不同的线程切换操作 二.完整代码示例 前言 发布线程发布事件之后 , 消息中心需要转发这些事件 , 并执行相应的订阅方法 ; 在转发的过程中 , 需要针对订阅 ...

  2. python threading-单线程 多线程 主线程 子线程 setDeamon join

    python threading-单线程 多线程 主线程 子线程 setDeamon join 单线程 多线程 主线程和子线程 setDaemon() join() 测试多线程下程序运行的时间 创建多 ...

  3. 【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

    文章目录 一.判定当前线程是否是主线程 二.子线程中执行主线程方法 三.主线程中执行子线程方法 一.判定当前线程是否是主线程 在 Android 中 , 如果要判定当前线程是否是主线程 , 可以使用如 ...

  4. Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作

    前言:通常,我们写的公共的模块给别人用,但是这个模块又必须在特定的线程中执行. 比如,一个加载网络图片的的方法,需要在子线程中执行. /** * 加载网络图片 */ private void load ...

  5. Android 主线程子线程执行关系

    Android 切换线程的方式[我常用的]     1. Handler.post[切换至主线程]     2. new Thread().start()[切换至子线程] 3. 线程池 ThreadP ...

  6. 多线程经典问题1——主线程子线程交替问题

    提出问题: * 子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次.如此循环50次. 分析:这个实际上是非常easy的问题.即子线程r ...

  7. linux_主线程子线程退出关系

    我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下. 1. 主线程等待新线程先结束退出,主线程后退出.正常执行. 实例代码: #include &q ...

  8. 主线程 子线程死掉_当线程死时,子进程也会死

    我有一个程序可以触发Python计时器来生成子进程.一旦程序终止或终止,这些子进程就应该终止.为了做到这一点,我使用了"prctl hack",它设置了一旦父对象死亡,子对象应该接 ...

  9. android 主线程调用,Android 主线程和线程之间相互发送消息

    通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...

最新文章

  1. VGG卷积神经网络模型加载与运行
  2. Linux 软件安装与卸载之获取程序包的途径
  3. 第一次团队作业——团队展示
  4. POJ - 3415 Common Substrings(长度不小于K的公共子串个数)
  5. 编程不需要天赋和激情
  6. 分享一份软件测试面试指南
  7. 2022新UI聚合支付系统四方源码下载+升级修复漏洞完美版
  8. html5鲜花网页代码,JS制作漂亮的鲜花完整代码
  9. unity应用开发实战案例_Unity AR增强现实开发实战
  10. spark Hash Shuffle内幕彻底解密
  11. win10开启自带移动热点以及解决无法设置移动热点,请打开WLAN问题
  12. 宽带换了新的账号怎么连接服务器地址,宽带换了路由器设置步骤图解
  13. LaTex 自动生成IEEE格式的参考文献
  14. 潇潇日暮时,掠水鸳鸯散。(01背包
  15. 重装win7系统后打开截图工具显示“截图工具当前未在计算机上运行”怎么办
  16. 关于 Dota Rdsp 计算器的编写(一)
  17. 2020.5.12第一次博客
  18. 指针:const与指针
  19. Bribe the Prisoners(2009 Round 1C C)
  20. tomcat的启动流程及原理

热门文章

  1. 微信点击按钮关闭当前页面回到微信对话窗口
  2. PAT 甲级 1018 Public Bike Management
  3. 学编程难吗?多久能入门?
  4. 服务器系统如何克隆,服务器如何克隆操作系统
  5. 暴走英雄坛计算机在线,暴走英雄坛计算器
  6. callee、caller、call、apply、bind这些方法的含义和使用
  7. 全国计算机等级考试-三级信息安全考试知识点(无顺序)
  8. 计算机自主招生证书,高校自主招生必备常识:五大学科竞赛证书含金量
  9. mysql 查询结果取别名_mysql合并查询结果及为表和字段取别名
  10. java计算乘地铁费用_Java_地铁购票系统