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);
- 将工作项提交到工作队列:
- 带延迟提交:rt_err_t rt_work_submit(struct rt_work *work, rt_tick_t time);
- 无延迟递交:
rt_err_t rt_workqueue_dowork(struct rt_workqueue *queue, struct rt_work *work);
- 紧急递交到队列头部:rt_err_t rt_workqueue_critical_work(struct rt_workqueue *queue, struct rt_work *work);
- 取消递交:
-
等待执行完后取消rt_err_t rt_workqueue_cancel_work_sync(struct rt_workqueue *queue, struct rt_work *work);
- 直接取消递交工作项:rt_err_t rt_work_cancel(struct rt_work *work);
- 工作完成不在使用时可以销毁:rt_err_t rt_workqueue_destroy(struct rt_workqueue *queue);