RTX5 | 线程管理03 - 线程退出osThreadExit
文章目录
- 一、前言
- 二、实验的目的
- 三、API
- 四、代码
- 4.1、main.h
- 4.2、main.c
- 五、Event Recorder调试
- 六、细节补充
- 6.1、线程属性成员attr_bits = osThreadDetached时,调用osThreadExit
- 6.2、线程属性成员attr_bits = osThreadJoinable时,调用osThreadExit
一、前言
在实际项目上,有的线程只运行一次需要自动退出,有的线程当达到某些条件时也需要自动退出,并释放堆栈的内存。为满足这个需求,RTX5提供了一个API函数osThreadExit。
当在线程里调用osThreadExit时,有一些细节需要注意:
- 当线程的属性成员attr_bits为osThreadDetached时,在线程里调用osThreadExit,线程直接消失,并释放堆栈内存。
- 当线程的属性成员attr_bits为osThreadJoinable时,在线程里调用osThreadExit,线程从RUNNING(运行态)进入INACTIVE/TERMINATED(终止态),不释放堆栈内存。
二、实验的目的
通过长按按键KEY1,让Start线程退出。
三、API
按照官方的例子,在线程函数里直接调用osThreadExit()即可。
四、代码
4.1、main.h
4.2、main.c
线程属性成员attr_bits为 osThreadDetached。
五、Event Recorder调试
Event Recorder可以很方便调试RTX5。
六、细节补充
6.1、线程属性成员attr_bits = osThreadDetached时,调用osThreadExit
使用动态堆栈方式创建的线程被osThreadExit终止后,堆栈会被系统回收,被回收的内存可以被其他线程使用。静态堆栈方式(全局变量)创建的线程,堆栈不由RTOS系统管理。线程被osThreadExit终止后,内存无法被其他线程使用。
线程的成员变量attr_bits为osThreadDetached。当我长按按键KEY1时,Start线程直接消失了。此时,想要让线程重新运行起来,只能调用osThreadNew重新创建线程了。
6.2、线程属性成员attr_bits = osThreadJoinable时,调用osThreadExit
将线程属性成员attr_bits改为 osThreadJoinable。当KEY1长按时,Start线程并没有消失,只是进入终止态而已,等待下一次线程重新加入运行(osThreadJoin + osThreadNew)。
RTX5 | 线程管理03 - 线程退出osThreadExit相关推荐
- 《线程管理:线程基本操作》
目录 线程管理 启动线程与(不)等待线程完成 特殊情况下的等待(使用trycath或rall) 后台运行线程 线程管理 启动线程与(不)等待线程完成 提供的函数对象被复制到新的线程的存储空间中,函数对 ...
- OpenGauss线程管理-系统日志线程-syslogger
OpenGauss线程管理-系统日志线程-syslogger 系统日志(syslogger)出现在Postgres 8.0中.它通过重定向到管道来捕获postmaster.后端和其他子进程的所有std ...
- OpenGauss线程管理-主线程-Postmaster(1)
OpenGauss线程管理-主线程-Postmaster(1) 主线程postmaster负责内存.全局信息.信号.线程池等的初始化,用来创建其他子线程,OpenGauss是单进程多线程,在程序启动时 ...
- OpenGauss线程管理-检查点线程-Checkpointer
OpenGauss线程管理-检查点线程-Checkpointer 检查点线程处理所有检查点. 检查点会在自上一个检查点后经过一定时间后自动分派,并且它也可以发出信号以执行请求的检查点. (要求每隔这么 ...
- 二. 线程管理之线程池
不忘初心 砥砺前行, Tomorrow Is Another Day ! 相关文章 一. 线程管理之Thread基础 二. 线程管理之线程池 三. 线程管理之ThreadLocal 四. 线程管理之A ...
- RTX5 | 线程管理04 - 线程加入osThreadJoin
文章目录 一.前言 二.实验目的 三.API 四.代码 4.1.main.h 4.2.main.c 五.Event Recorder调试 一.前言 当线程的属性成员attr_bits为osThread ...
- python线程wait_python基础线程-管理并发线程
线程模块建立在线程的底层特性之上,使线程的工作变得更简单.更像python.使用线程允许程序在同一进程空间中并发运行多个操作. 线程对象 使用线程最简单的方法是用目标函数实例化它,然后调用start( ...
- RTX5 | 线程管理05 - 线程挂起osThreadSuspend与线程恢复osThreadResume
文章目录 一.前言 二.API 三.实验目的 四.代码 4.1.main.h 4.2.main.c 五.Event Recorder调试 一.前言 osThreadSuspend可以让线程A挂起,线程 ...
- c++并发编程(concurrency)----线程管理
c++并发编程(concurrency)----线程管理 启动线程,指定线程运行函数的多种方法 等待线程执行完毕 唯一辨别线程的方法 如果已经有兴趣启动多线程程序了,那么问自己个问题,如何启动多线程? ...
最新文章
- 小黑盒不显示服务器,steam上买的游戏小黑盒不显示 | 手游网游页游攻略大全
- Redis:从应用到底层,一文帮你搞定
- centos 静态ip_CentOS 6 静态 IP 配置
- (Excel)常用函数公式及操作技巧之四:文本与页面设置(二)
- MODIS(TerraAqua)陆地标准产品
- 从老赖们“维权”,看拍拍贷的底色
- win7完整卸载oracle11,win7安装与卸载oracle11g(32)
- java string 日期_java string类型日期比较
- 「代码随想录」关于多重背包,你该了解这些!
- axhline函数--Matplotlib
- 山寨游戏之超级奥巴马(SUPER OBAMA WORLD)
- graphpad折线图教程_Graphpad Prism5作图教程
- 怎么换c语言程序窗口背景图,vc++如何给窗体添加背景图片
- dw做注册登录页面HTML代码,用DW做的简单的个人网站(可以用来当网页作业)
- cuba_认识CLI for CUBA平台
- 互联网券商线上开户系统设计与开发技术分享
- python 拆分pdf指定页,Python按页拆分pdf
- 知识产权律师介绍企业涉外法律服务
- 攻防世界writeup——Web(持续更新)
- 安装Python 出现0x80072f7d错误的解决办法
热门文章
- group by 和where 条件后面不能用刚设置的别名。
- java 对接支付宝支付
- nginx 负载均衡tomcat
- 【bzoj2761】【JLOI2011】【不反复数字】【平衡树】
- GdiPlus[47]: IGPMatrix 矩阵(二)
- 重新创建Activity
- 肿瘤坏死因子(TNF)阻断剂治疗幼年型银屑病关节炎: 有效吗
- 程序员|听说你们都很好说话?你做几件事,就知道了!
- 那些开发《虚拟光驱》的人们
- 程序员---不要对自己说“不可能”