耗时任务处理方式

今天遇到一个耗时任务,该任务分为1,2,3,4 四个步骤,每个步骤持续两秒,一共八秒时间,并且要求该任务在执行的同时,可以随时打断该任务。通常开始写的时候很容易写成将Task处理函数内部延时 8000Ms,但是这样的有两个问题,第一个问题是在该任务执行期间,系统将在这里不间断耗时8000Ms,严重影响系统性能。第二 在该任务执行期间,无法中断该任务。解决方式:

int xxx_task()
    {
        while(1){
            if(xQueueReceive(motor_listen_queue, &evt, 2000 /portTICK_RATE_MS)){

                code:
                处理1: 通过 消息队列的终止命令 终止该任务的操作
                处理2: 设置执行该任务的标志为1
            }else{

                code:
                处理1:判断该任务的标志是否为1 是的话开始执行该任务

            }
        }
    }

此段代码的逻辑是,当我的任务消息队列接收到 执行任务命令的时候,并不直接开始执行该任务,而是通过设置某个标志位间接的执行任务。

  1. 任务等待调度器 调用
  2. 调度器调用该任务函数,检测是否接收到 执行该任务的指令,如果任务消息队列中有执行命令,即xQueueReceive()返回为真(xQueueReceive接收到消息后会自动清除),则设置 设置执行该任务的标志为1 ,代表可以执行该任务,经过2000Ms(该任务的执行时间)之后,调度器放开该任务,则xQueueReceive()为假,则开始进入else分支 执行该任务。这样的话随时可以终止该任务,并且系统也不会持续在该处运行8S。

猜你喜欢

转载自blog.csdn.net/linuxarmbiggod/article/details/81211200