任务调度增加进入睡眠以及退出睡眠的委托,以方便移植到RTOS上
This commit is contained in:
parent
de2db57d4d
commit
63cce80167
|
@ -173,6 +173,9 @@ TaskScheduler::TaskScheduler(cstring name)
|
||||||
LastTrace = Sys.Ms();
|
LastTrace = Sys.Ms();
|
||||||
|
|
||||||
_SkipSleep = false;
|
_SkipSleep = false;
|
||||||
|
|
||||||
|
EnterSleep = nullptr;
|
||||||
|
ExitSleep = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 使用外部缓冲区初始化任务列表,避免频繁的堆分配
|
// 使用外部缓冲区初始化任务列表,避免频繁的堆分配
|
||||||
|
@ -353,7 +356,11 @@ INROOT void TaskScheduler::Execute(uint msMax, bool& cancel)
|
||||||
{
|
{
|
||||||
min -= now;
|
min -= now;
|
||||||
Sleeping = true;
|
Sleeping = true;
|
||||||
Time.Sleep(min, &Sleeping);
|
// 通知外部,需要睡眠若干毫秒
|
||||||
|
if(EnterSleep)
|
||||||
|
EnterSleep(min);
|
||||||
|
else
|
||||||
|
Time.Sleep(min, &Sleeping);
|
||||||
Sleeping = false;
|
Sleeping = false;
|
||||||
|
|
||||||
// 累加睡眠时间
|
// 累加睡眠时间
|
||||||
|
@ -400,6 +407,9 @@ INROOT void TaskScheduler::SkipSleep()
|
||||||
{
|
{
|
||||||
_SkipSleep = true;
|
_SkipSleep = true;
|
||||||
Sleeping = false;
|
Sleeping = false;
|
||||||
|
|
||||||
|
// 通知外部,要求退出睡眠,恢复调度
|
||||||
|
if(ExitSleep) ExitSleep();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 显示状态
|
// 显示状态
|
||||||
|
|
|
@ -77,6 +77,10 @@ public:
|
||||||
UInt64 TotalSleep; // 所有任务的总睡眠时间ms
|
UInt64 TotalSleep; // 所有任务的总睡眠时间ms
|
||||||
UInt64 LastTrace; // 最后统计跟踪时间ms
|
UInt64 LastTrace; // 最后统计跟踪时间ms
|
||||||
|
|
||||||
|
typedef void (*SAction)(uint ms);
|
||||||
|
SAction EnterSleep; // 通知外部,需要睡眠若干毫秒
|
||||||
|
Func ExitSleep; // 通知外部,要求退出睡眠,恢复调度
|
||||||
|
|
||||||
TaskScheduler(cstring name = nullptr);
|
TaskScheduler(cstring name = nullptr);
|
||||||
|
|
||||||
// 使用外部缓冲区初始化任务列表,避免频繁的堆分配
|
// 使用外部缓冲区初始化任务列表,避免频繁的堆分配
|
||||||
|
|
Loading…
Reference in New Issue