耗时任务处理方式

今天遇到一个耗时任务,该任务分为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。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux老A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值