Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
内核
线程
rt_thread_detach() 函数代码咨询
发布于 2021-11-21 17:25:49 浏览:1244
订阅该版
```c rt_err_t rt_thread_detach(rt_thread_t thread) { rt_base_t lock; RT_ASSERT(thread != RT_NULL); RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); // 检查是否为静态线程 RT_ASSERT(rt_object_is_systemobject((rt_object_t)thread)); if ((thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_CLOSE) return RT_EOK; if ((thread->stat & RT_THREAD_STAT_MASK) != RT_THREAD_INIT) { /* remove from schedule */ rt_schedule_remove_thread(thread); } _thread_cleanup_execute(thread); rt_timer_detach(&(thread->thread_timer)); /* 将线程状态更新为Close */ thread->stat = RT_THREAD_CLOSE; // 哈哈哈,这里的代码很有意思哈,如果不是静态线程上面在参数检查时就会产生Assert啦,为啥还要else分支呢??? if (rt_object_is_systemobject((rt_object_t)thread) == RT_TRUE) { rt_object_detach((rt_object_t)thread); } else // else 分支的代码不是多余的么? 没有必要存在的吧??? { /* disable interrupt */ lock = rt_hw_interrupt_disable(); /* insert to defunct thread list */ rt_list_insert_after(&rt_thread_defunct, &(thread->tlist)); /* enable interrupt */ rt_hw_interrupt_enable(lock); } return RT_EOK; } ``` 在上面的if、else语句;首先,判断线程是否为静态线程,如果是静态线程,就将线程从内核中脱离;如果不是就将线程插入到僵尸线程链表当中; 但是,在函数的开头已经判断判断线程是否为静态线程啦,如果开启了DEBUG宏,不是静态线程的话,就直接产生Assert啦。 感觉else分支的内容没有必要存在???
查看更多
2
个回答
默认排序
按发布时间排序
caihaitao
2021-11-21
这家伙很懒,什么也没写!
是在考虑下面的情况么? 如果传入的线程是动态方式分配的线程句柄,在没有开启RT_DEBUG宏的情况下,Assert就不会产生;这个时候else分支的内容就会得到执行。 但是,这种情况是用户使用错误的情况。
出出啊
2021-11-21
恃人不如自恃,人之为己者不如己之自为也
1. 看我的文章里相关线程销毁的说明 2. 所有的 assert 处理更应该是让使用者明白这个函数参数限定的特征,并不建议工程产品一直启用 3. 动态线程对象要不要支持 atach/detach ,这个目前没有确切的说明,可能暂时不打算支持的吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1.2k
关于作者
caihaitao
这家伙很懒,什么也没写!
提问
5
回答
20
被采纳
9
关注TA
发私信
相关问题
1
请问执行rt_thread_delete的操作后,线程还在运行是什么情况?
2
rtthread中,线程中的ADC采样率需求比时钟嘀嗒需求高怎么办?
3
有没有检测系统中有没有某个名字的线程的接口函数?
4
使用finsh 进行ota成功,线程里开ota失败
5
调度锁会引起线程内存不足
6
线程处于close状态消耗资源吗
7
paho_mqtt线程相关疑问
8
thread中不能使用rt_timer_start() 来开启定时器
9
线程递归是什么形成的?
10
程序运行一会儿报错,拜托拜托
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
16
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部