线程恢复

线程恢复就是让挂起的线程重新进入就绪状态,如果被恢复线程在所有就绪态线程中,位于最高优先级链表的第一位,那么系统将进行线程上下文的切换。线程恢复使用下面的函数接口:

  1. rt_err_t rt_thread_resume (rt_thread_t thread);

线程安全

安全

中断例程

可调用

函数参数


  1. 参数 描述

  1. thread 要恢复的线程句柄。

函数返回

如果恢复的线程状态并不是RT_THREAD_SUSPEND状态,将返回-RT_ERROR;否则返回RT_EOK。

线程恢复的例子如下代码所示:

  1. /*
  2. * 程序清单:唤醒线程
  3. *
  4. * 这个例子中将创建两个动态线程(t1和t2),
  5. * 低优先级线程t1将挂起自身
  6. * 高优先级线程t2将在一定时刻后唤醒低优先级线程。
  7. */
  8. #include <rtthread.h>
  9. #include "tc_comm.h"
  10.  
  11. /* 指向线程控制块的指针 */
  12. static rt_thread_t tid1 = RT_NULL;
  13. static rt_thread_t tid2 = RT_NULL;
  14. /* 线程1入口 */
  15. static void thread1_entry(void* parameter)
  16. {
  17. /* 低优先级线程1开始运行 */
  18. rt_kprintf("thread1 startup%d\n");
  19.  
  20. /* 挂起自身 */
  21. rt_kprintf("suspend thread self\n");
  22. rt_thread_suspend(tid1);
  23. /* 主动执行线程调度 */
  24. rt_schedule();
  25.  
  26. /* 当线程1被唤醒时 */
  27. rt_kprintf("thread1 resumed\n");
  28. }
  29.  
  30. /* 线程2入口 */
  31. static void thread2_entry(void* parameter)
  32. {
  33. /* 延时10个OS Tick */
  34. rt_thread_delay(10);
  35.  
  36. /* 唤醒线程1 */
  37. rt_thread_resume(tid1);
  38.  
  39. /* 延时10个OS Tick */
  40. rt_thread_delay(10);
  41.  
  42. /* 线程2自动退出 */
  43. }
  44.  
  45. int rt_application_init(void)
  46. {
  47. /* 创建线程1 */
  48. tid1 = rt_thread_create("t1",
  49. thread1_entry, /* 线程入口是thread1_entry */
  50. RT_NULL, /* 入口参数是RT_NULL */
  51. THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
  52. if (tid1 != RT_NULL)
  53. rt_thread_startup(tid1);
  54.  
  55. /* 创建线程2 */
  56. tid2 = rt_thread_create("t2",
  57. thread2_entry, /* 线程入口是thread2_entry */
  58. RT_NULL, /* 入口参数是RT_NULL */
  59. THREAD_STACK_SIZE, THREAD_PRIORITY - 1,
  60. THREAD_TIMESLICE);
  61. if (tid2 != RT_NULL)
  62. rt_thread_startup(tid2);
  63.  
  64. return 0;
  65. }