嵌入式技术论坛
直播中

刘秀英

7年用户 1325经验值
私信 关注
[问答]

这个是个什么情况?不能第二次启动同一个线程?

这段时间遇到个奇怪的问题,就是同一个线程,先执行rt_thread_delete把其删除,然后又重新启动这个线程,竟然无法重启启动该线程,试了好几遍。

tid1 = rt_thread_create(XXX)
rt_thread_startup(tid1);
rt_thread_delete(tid1);

延时重新启动这个线程

tid1 = rt_thread_createXXX)
rt_thread_startup(tid1);

尽然就卡住了,这个线程尽然重新起起不了,卡住。。。。

这个是个什么情况?不能第二次启动同一个线程,不应该啊,求助!!!

回帖(4)

王萍

2023-5-17 14:17:00
删除线程,不是挂起线程,线程信息与线程栈就会释放,所以需要重新创建

1、tid1 = rt_thread_create(XXX)
2、rt_thread_startup(tid1);
3、rt_thread_delete(tid1); / 删除后,线程就没有了,需要重新 create /

4、tid1 = rt_thread_create(XXX)

5、rt_thread_startup(tid1); / 再启动 /
举报

刘秀英

2023-5-17 14:17:07
新开了一个空的工程试了可以重启成功,有可能是我那个源工程线程功能上开了很多锁和信号量,导致删除了线程,别的线程一直在等待所以卡起来了。
举报

王萍

2023-5-17 14:17:15
设计的好,理论上一个线程就可以搞定,为何需要频繁删除创建线程?删除线程,使用的一些信号量、互斥量、等等资源,都需要考虑是否或者重新创建。

可以使用通讯方式,把处理放在一个线程执行,或者开两个线程,交替执行,无须删除。
举报

刘桂英

2023-5-17 14:17:22
建议增加判断线程是否删除成功了,然后再往下进行。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分