关于线程挂起的实现方法的疑问

发表在 Kernel2019-10-11 21:25 [复制链接] 1 339

本帖最后由 春和景明 于 2019-10-11 21:28 编辑
( V, g% s7 {2 W2 m; J! i: j4 L. \- M1 [# b2 A# Y" y+ X! S
今天刚用用挂起功能(之前没用过),发现无法实现
: V) w1 m, y, v3 @& O
( m3 z, }3 j$ G0 t: ?static void thread1_entry(void* parameter)
8 j% J% d; K) ]{
$ v" K! Y7 X( @( Wrt_uint32_t count = 0;
! y  C" u- y& Q1 U0 \$ Y: I& Swhile (1)
6 m2 d+ W# t! O9 x9 B* }: C2 p{
( l$ b5 F1 R7 A- ], Z4 U: i2 u! v1 V* q! b  U  ~) [& j7 M# \6 X
   rt_kprintf("out some msg。。。");
7 z% H: K& B; O8 ?9 d- b   rt_thread_mdelay(1000);
# g: {& H7 @7 s1 o4 |4 Y: D5 F% h}5 Z7 r, i8 L' D7 p8 w
}2 X( Z- I' X4 r3 |% o  F5 ]

3 i" ^- n% T% K4 x- G+ i' M* V: \1 }( l
static void thread2_entry(void* parameter)
3 T# y+ P0 w' q, C6 G{5 I% Y8 P, L; s. Z
  按键线程 0 l  d" U+ t, p( h
  按键按下 依次 挂起 恢复 挂起 恢复。。。: `" \/ N( ?- s% {$ c; _3 G7 s
}7 Q6 \( C( L. Q9 j2 |) ?' o3 T
- i/ o: y4 H  C. s* Y5 k
5 R9 B+ g  x# n
看帖子,有大神说有 rt_thread_mdelay无法挂起,如果当前是线程的状态是挂起状态,就无法使用rt_thread_suspend挂起该线程。应该IPC之类的实现。3 R0 C: x1 k& u: W

1 S( |6 F8 ^% b3 `要改成这样吗* o: ~  z% Y# B4 _
static void thread1_entry(void* parameter)
" F+ Z, w" Q; X8 s; b5 t{
. I7 S2 n  T  r4 jrt_uint32_t count = 0;' C2 I* K5 [3 Q1 a0 g9 B
while (1)
* K, g1 {6 s+ u( l8 c* g{2 ?! g6 a) S2 }: [; Q
   rt_mutex_take(ComMutex, RT_WAITING_FOREVER);9 n- v1 h, o2 Z) Y/ B9 h
   rt_kprintf("out some msg。。。");( b/ f) {$ S9 j7 q
  rt_mutex_release(ComMutex);( L+ u' s/ L& J; W1 b
   rt_thread_mdelay(1000);
& E& }* n4 b  o8 X0 V2 x% P8 @}
" W  [4 N% d9 o: x/ M, i- z: w+ Z/ V* q' R: @6 p8 u
static void thread2_entry(void* parameter)' h: ^8 s5 Q0 o- C, O9 ~- w4 I* K# T
{
9 v  C" N: F) @2 Z& V4 T  按键线程 ) {5 g+ J" V* h6 R7 ^% H2 k: c, f
  按键按下 一次 take  release。。。吗
! o( [0 ~3 s/ O6 A}
1 x: _( Z. h) X7 L4 M1 k
- R, B0 ^- z3 E, p! L' |: f( n- u+ w' w$ S+ a) E- c! W
那么开机想让thread1_entry保持沉默,第一个rt_mutex_take放在哪里合适?6 o' A: {4 B( H0 x/ v
另外rt_mutex_take和rt_mutex_release是不是必须在一个线程内成对调用,比如main函数take了别的线程无法release。: @# B) m  u, ^6 s# q; e* A6 t: H
9 x+ [! b( D, ?: Y* z+ A. n6 a
0 v3 H5 V+ R/ k" Y; k  t
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-10-11 21:30:31 | 显示全部楼层
刚试验了次 在初始化thread2_entry线程的函数中中创建互斥量 并在该线程开始的部分(while(1)之前) take,然后检测按键,依次take  release 能实现thread1_entry线程的挂起
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 36 主题
  2. 443 帖子
  3. 443 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表