TuyaOS
工作队列

涂鸦TuyaOS 提供通用的异步任务调度机制,将工作任务发送到指定的工作队列,工作队列会串行的执行队列里的工作任务。资源丰富的平台可以根据自身的需求,创建自己的工作队列,并通过工作队列调度一些工作任务。

接口描述

创建工作队列

OPERATE_RET tal_workqueue_create(CONST UINT16_T queue_len, THREAD_CFG_E *thread_cfg, WORKQUEUE_HANDLE *handle);
OPERATE_RET tal_workqueue_create(CONST UINT16_T queue_len, THREAD_CFG_T *thread_cfg, WORKQUEUE_HANDLE *handle)
create and initialize a workqueue which runs in thread context

添加工作到工作队列

OPERATE_RET tal_workqueue_schedule(WORKQUEUE_HANDLE handle, WORKQUEUE_CB cb, VOID_T *data);
OPERATE_RET tal_workqueue_schedule(WORKQUEUE_HANDLE handle, WORKQUEUE_CB cb, VOID_T *data)
put work task in workqueue

示例代码

#define TY_WQ_STACK_SIZE 2048
#define TY_WQ_TRD_PRIO 3
#define TY_WQ_WORK_NAME "wq-0"
VOID sample_work_cb(VOID *data)
{
PR_DEBUG("work is here %p", data);
}
OPERATE_RET test_work_queue()
{
int rt = OPRT_OK;
// 初始化工作队列
WORKQUEUE_HANDLE ty_wq_hand = NULL;
THREAD_CFG_E thread_cfg = {TY_WQ_STACK_SIZE, TY_WQ_TRD_PRIO, TY_WQ_WORK_NAME};
rt = tal_workqueue_create(TY_WQ_WORK_NUM,&thread_cfg, &ty_wq_hand);
EXPECT_EQ(rt, OPRT_OK);
// 添加待执行任务
rt = tal_workqueue_schedule(ty_wq_hand, sample_work_cb, NULL);
EXPECT_EQ(rt, OPRT_OK);
return OPRT_OK;
}