rt-thread中的工作队列

消息队列大家都知道,工作队列是啥?

消息队列中的内容是一个个的消息内容指针,工作队列中的内容为一个一个待处理的函数(工作项)。rt-thread有系统的工作队列,用户也可以用类似的方法创建自己的工作队列:

  • 创建自己的工作队列:struct rt_workqueue *rt_workqueue_create(const char *name, rt_uint16_t stack_size, rt_uint8_t priority);
  • 先初始化自己的工作项(即待处理函数,入口参数,延迟时间):rt_inline void rt_work_init(struct rt_work *work, void (*work_func)(struct rt_work *work, void *work_data), void *work_data);
  • 将工作项提交到工作队列:
  1. 带延迟提交:rt_err_t rt_work_submit(struct rt_work *work, rt_tick_t time);
  2. 无延迟递交:rt_err_t rt_workqueue_dowork(struct rt_workqueue *queue, struct rt_work *work);
  3. 紧急递交到队列头部:rt_err_t rt_workqueue_critical_work(struct rt_workqueue *queue, struct rt_work *work);

 

 

 

  • 取消递交:
  1. 等待执行完后取消rt_err_t rt_workqueue_cancel_work_sync(struct rt_workqueue *queue, struct rt_work *work);
  2. 直接取消递交工作项:rt_err_t rt_work_cancel(struct rt_work *work);
  • 工作完成不在使用时可以销毁:rt_err_t rt_workqueue_destroy(struct rt_workqueue *queue);
posted on 2022-08-12 19:56  杰瑞鼠  阅读(197)  评论(0编辑  收藏  举报