当前位置: 首页 > news >正文

Qt多线程2

我们可以认为,DebugText对象是一个临界资源,即一次只能有一个线程来使用。临界区资源必须要互斥访问,不然就会出现各种Bug。

使用QMutex类的相关功能可以保证一次只有一个线程使用该代码段。

我们在DebugText类里面加入下面这句声明:

QMutex *mutexInDebugText;

然后再构造函数中:

mutexInDebugText = new QMutex;

接下来,我们再在addContents中加入下面的话:

void DebugText::addContents(const QString& s1)
{
	mutexInDebugText->lock();
	ShowDebugArea->append(s1);
	show();
	mutexInDebugText->unlock();
}

然后我们在主函数中再把程序改成第一次运行的样子:

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	MultiThread  mythread;
	mythread.start();
	//mythread.terminate();
	int i = 10;
	while (i--) {
		DebugText::getDebugText()->addContents("bbbbbb");

	}	

	//QThread::sleep(100);
	return a.exec();
}

现在,bbbbbbbb 和 aaaaaaaa 是交替打印出来的。

说明我们的类设计成功了。

现在,我们再用另一种方式:

我们把addContents函数里面再改为:

	QMutexLocker locker(mutexInDebugText);
	//mutexInDebugText->lock();
	ShowDebugArea->append(s1);
	show();
	//mutexInDebugText->unlock();

它可以在退出作用域以后就自动释放锁。

关于多线程还有信号量机制,该机制的作用一般在某些特别的场合,例如常见的生产者消费者问题,这类问题以后我们再谈,它的机制很简单,但是需要一定的逻辑概念。

 

相关文章:

  • 基于QT的文件管理软件编写 系列 引言
  • 基于QT的文件管理软件编写 系列 1
  • python安装tensorflow
  • 机器学习之 Keras默认数据集/模型存放位置
  • 从零开始写出分而治之查找最大子列表的算法
  • 学机器学习必备的一些python句法基础 1 列表 元组 字典 条件语句
  • 学机器学习必备的一些python句法基础 2 循环
  • 学机器学习必备的一些python句法基础 3 函数 内建函数 模块 包 全局局部变量
  • 学机器学习必备的一些python句法基础 4 Python类和对象
  • 学机器学习必备的一些python句法基础 5 文件读写
  • 算法 后缀表达式计算加减乘除
  • 算法题分析 出入栈问题
  • 算法 队列问题(浙大数据结构视频作业)
  • 算法 PAT真题 Pop Sequence 分析思路以及实现 1
  • 机器学习 Tensorflow基本句法1 张量 计算图 会话
  • canvas 五子棋游戏
  • Cookie 在前端中的实践
  • ES6 ...操作符
  • Javascript基础之Array数组API
  • MaxCompute访问TableStore(OTS) 数据
  • Promise面试题2实现异步串行执行
  • session共享问题解决方案
  • WePY 在小程序性能调优上做出的探究
  • XForms - 更强大的Form
  • zookeeper系列(七)实战分布式命名服务
  • 大整数乘法-表格法
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 缓存与缓冲
  • 来,膜拜下android roadmap,强大的执行力
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 驱动程序原理
  • 软件开发学习的5大技巧,你知道吗?
  • 树莓派 - 使用须知
  • 算法系列——算法入门之递归分而治之思想的实现
  • 微信小程序填坑清单
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ###C语言程序设计-----C语言学习(3)#
  • #微信小程序(布局、渲染层基础知识)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三十五)大数据实战——Superset可视化平台搭建
  • (一)appium-desktop定位元素原理
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)Scala的“=”符号简介
  • *2 echo、printf、mkdir命令的应用
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net 知识杂记
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @Repository 注解
  • @RequestBody详解:用于获取请求体中的Json格式参数