标题: 时间片轮询法中,如何处理同一时间不同任务 [打印本页]

作者: cmx86081212    时间: 2019-4-5 19:01
标题: 时间片轮询法中,如何处理同一时间不同任务
Task_Struct tasks[] =
{
   {0,200,200,task1},  //用各个任务的函数名初始化
   {0,60,60,task2},
   {0,100,100,task3},
   {0,10,10,task4}
};     
比如在此任务数组中有4个任务,但是每个任务的时间片是不同的。200ms/60ms/100ms/10ms
所以能在4个不同时间片执行相应的任务。
我的问题是在同一个时间片如何处理不同任务?
比如定时60秒的时间片,60秒到要处理显示更新以及倒计时这两个任务该如何解决?
(1)Task_Struct tasks[] =
{
     {0,60,60,task1},//任务一显示更新
     {0,60,60,task2},//任务二倒计时
}
(2)Task_Struct tasks[] =
{
     {0,60,60,task1}
}

void task1()
{
      work1();//任务一显示更新
      work2();//任务二倒计时
}
这两种方法行不行的通?或者有没更好的方法能够解决?
注:关于时间片轮解释如下

作者: cjp88811283    时间: 2020-12-26 13:52
需要注意的是,这种方法的前提是执行的 每个任务都是短小精悍的,要不然一个任务执行的时间过长,大于其它任务设置的时间片值,那其它任务就无法保证按它预设的时间片来执行。

尤其需要注意任务中延时的使用,可能会产生不可预料的结果。如果任务内部需要延时的时候,或者说单个任务过长,需要保存任务执行到一半的状态,建议使用状态机切割长任务。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1