升级任务调度器,支持创建事件型任务
This commit is contained in:
parent
2d250a4df2
commit
2c6e768654
12
Sys.cpp
12
Sys.cpp
|
@ -552,7 +552,7 @@ void TSys::ToHex(byte* buf, byte* src, uint len)
|
|||
#include "Task.h"
|
||||
|
||||
// 创建任务,返回任务编号。priority优先级,dueTime首次调度时间us,period调度间隔us,-1表示仅处理一次
|
||||
uint TSys::AddTask(Action func, void* param, ulong dueTime, long period, string name)
|
||||
uint TSys::AddTask(Action func, void* param, long dueTime, long period, string name)
|
||||
{
|
||||
return Scheduler.Add(func, param, dueTime, period, name);
|
||||
}
|
||||
|
@ -562,6 +562,16 @@ void TSys::RemoveTask(uint taskid)
|
|||
Scheduler.Remove(taskid);
|
||||
}
|
||||
|
||||
bool TSys::SetTask(uint taskid, bool enable)
|
||||
{
|
||||
Task* task = Scheduler[taskid];
|
||||
if(!task) return false;
|
||||
|
||||
task->Enable = enable;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void TSys::Start()
|
||||
{
|
||||
#if DEBUG
|
||||
|
|
3
Sys.h
3
Sys.h
|
@ -130,8 +130,9 @@ private:
|
|||
|
||||
public:
|
||||
// 创建任务,返回任务编号。dueTime首次调度时间us,period调度间隔us,-1表示仅处理一次
|
||||
uint AddTask(Action func, void* param, ulong dueTime = 0, long period = 0, string name = NULL);
|
||||
uint AddTask(Action func, void* param, long dueTime = 0, long period = 0, string name = NULL);
|
||||
void RemoveTask(uint taskid);
|
||||
bool SetTask(uint taskid, bool enable);
|
||||
void Start(); // 开始系统大循环
|
||||
Func OnStart;
|
||||
};
|
||||
|
|
22
Task.cpp
22
Task.cpp
|
@ -30,9 +30,10 @@ void Task::Execute(ulong now)
|
|||
TimeCost tc;
|
||||
SleepTime = 0;
|
||||
|
||||
Task* cur = _Scheduler->Current;
|
||||
_Scheduler->Current = this;
|
||||
Callback(Param);
|
||||
_Scheduler->Current = NULL;
|
||||
_Scheduler->Current = cur;
|
||||
|
||||
// 累加任务执行次数和时间
|
||||
Times++;
|
||||
|
@ -51,8 +52,12 @@ void Task::Execute(ulong now)
|
|||
if(cost > 500000) debug_printf("Task::Execute 任务 %d [%d] 执行时间过长 %dus 睡眠 %dus\r\n", ID, Times, cost, SleepTime);
|
||||
#endif
|
||||
|
||||
// 如果是事件型任务,这里禁用
|
||||
if(NextTime < 0)
|
||||
Enable = false;
|
||||
// 如果只是一次性任务,在这里清理
|
||||
if(Period < 0) _Scheduler->Remove(ID);
|
||||
else if(Period < 0)
|
||||
_Scheduler->Remove(ID);
|
||||
}
|
||||
|
||||
// 显示状态
|
||||
|
@ -95,8 +100,8 @@ TaskScheduler::~TaskScheduler()
|
|||
_Tasks.DeleteAll().Clear();
|
||||
}
|
||||
|
||||
// 创建任务,返回任务编号。dueTime首次调度时间us,period调度间隔us,-1表示仅处理一次
|
||||
uint TaskScheduler::Add(Action func, void* param, ulong dueTime, long period, string name)
|
||||
// 创建任务,返回任务编号。dueTime首次调度时间us,-1表示事件型任务,period调度间隔us,-1表示仅处理一次
|
||||
uint TaskScheduler::Add(Action func, void* param, long dueTime, long period, string name)
|
||||
{
|
||||
Task* task = new Task(this);
|
||||
task->ID = _gid++;
|
||||
|
@ -104,7 +109,14 @@ uint TaskScheduler::Add(Action func, void* param, ulong dueTime, long period, st
|
|||
task->Callback = func;
|
||||
task->Param = param;
|
||||
task->Period = period;
|
||||
task->NextTime = Time.Current() + dueTime;
|
||||
|
||||
if(dueTime < 0)
|
||||
{
|
||||
task->NextTime = dueTime;
|
||||
task->Enable = false;
|
||||
}
|
||||
else
|
||||
task->NextTime = Time.Current() + dueTime;
|
||||
|
||||
Count++;
|
||||
_Tasks.Add(task);
|
||||
|
|
6
Task.h
6
Task.h
|
@ -27,7 +27,7 @@ public:
|
|||
void* Param; // 参数
|
||||
|
||||
long Period; // 周期us
|
||||
ulong NextTime; // 下一次执行时间
|
||||
long NextTime; // 下一次执行时间
|
||||
|
||||
int Times; // 执行次数
|
||||
int CpuTime; // 总耗费时间
|
||||
|
@ -66,8 +66,8 @@ public:
|
|||
TaskScheduler(string name = NULL);
|
||||
~TaskScheduler();
|
||||
|
||||
// 创建任务,返回任务编号。dueTime首次调度时间us,period调度间隔us,-1表示仅处理一次
|
||||
uint Add(Action func, void* param, ulong dueTime = 0, long period = 0, string name = NULL);
|
||||
// 创建任务,返回任务编号。dueTime首次调度时间us,-1表示事件型任务,period调度间隔us,-1表示仅处理一次
|
||||
uint Add(Action func, void* param, long dueTime = 0, long period = 0, string name = NULL);
|
||||
void Remove(uint taskid);
|
||||
|
||||
void Start();
|
||||
|
|
Loading…
Reference in New Issue