• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

在线程的主循环里线程本身挂起自己吗?

万里追牛 2020-12-16 浏览量:713
如题。挂起函数ret返回值是RT_EOK。但是调试的时候,该线程还是在不停的运行。
还有另外一个线程等待获取队列消息。没其他线程了。
  1. static void led2_thread_entry(void* parameter)
  2. {
  3.     rt_err_t ret;
  4.     uint8_t finishFlg = 0;
  5.     while(1)
  6.     {
  7.         ledAllClose();
  8.         AW9110B_set_luminance(LED_BATT_WHITE_CHANN MAX_LED_WHITE_VAL);
  9.         rt_thread_delay(20);
  10.         AW9110B_set_luminance(LED_BATT_ORG_CHANN 0);
  11.         rt_thread_delay(20);
  12.         AW9110B_set_luminance(LED_BATT_RED_CHANN 0);
  13.         rt_thread_delay(200);
  14.         AW9110B_set_luminance(LED_CLEAN_CHANN MAX_LED_WHITE_VAL);
  15.         rt_thread_delay(200);
  16.         AW9110B_set_luminance(LED_LOCK_CHANN MAX_LED_WHITE_VAL);
  17.         rt_thread_delay(200);
  18.         AW9110B_set_luminance(LED_SPEED_LOW_CHANN MAX_LED_WHITE_VAL);
  19.         rt_thread_delay(200);
  20.         AW9110B_set_luminance(LED_SPEED_MID_CHANN MAX_LED_WHITE_VAL);
  21.         rt_thread_delay(200);
  22.         AW9110B_set_luminance(LED_SPEED_HIGH_CHANN MAX_LED_WHITE_VAL);
  23.         rt_thread_delay(200);
  24.         finishFlg = 1;
  25.         ret = rt_mq_send(testMq &finishFlg sizeof(finishFlg));
  26.         if(RT_EOK != ret)
  27.         {
  28.             rt_kprintf("发送失败,错误代码:%x\r\n" ret);
  29.         }
  30.         ret = rt_thread_suspend(led2_thread);
  31.         if(RT_EOK != ret)
  32.         {
  33.             rt_kprintf("线程挂起失败,错误代码:%x\r\n" ret);
  34.         }
  35.     }
  36. }
m data-ke-onclick="copycode($('code_qFl'));">

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 参考RT-Thread开发手册中函数说明,rt_thread_suspend(rt_thread_t thread)注:通常不应该使用这个函数来挂起线程本身,如果确实需要采用rt_thread_suspend函数挂起当前任务,需要在调用rt_thread_suspend()函数后立刻调用rt_schedule()函数进行手动的线程上下文切换。

    另:不建议使用suspend函数​挂起线程,包括挂起自身,还是其它线程,线程间的同步可以考虑用信号量或互斥量等API,此例中可以判断消息队列是否满来决定下一步的动作

    • 发布于 2020-12-17
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:0

相关问题

问题达人换一批

在线程的主循环里线程本身挂起自己吗?