优化Sys.RemoveTask,自动把ID清零

This commit is contained in:
nnhy 2015-09-07 09:07:58 +00:00
parent 5332cbff4a
commit 4b1d56b077
13 changed files with 33 additions and 47 deletions

View File

@ -350,7 +350,7 @@ Enc28j60::~Enc28j60()
delete _spi; delete _spi;
_spi = NULL; _spi = NULL;
if(_ResetTask) Sys.RemoveTask(_ResetTask); Sys.RemoveTask(_ResetTask);
} }
void Enc28j60::Init(Spi* spi, Pin ce, Pin reset) void Enc28j60::Init(Spi* spi, Pin ce, Pin reset)

View File

@ -18,7 +18,7 @@ private:
ulong LastTime; // 记录最后一次收到数据的时间,超时重启 ulong LastTime; // 记录最后一次收到数据的时间,超时重启
uint ResetPeriod; // 重启间隔默认6秒 uint ResetPeriod; // 重启间隔默认6秒
int _ResetTask; // 重启任务 uint _ResetTask; // 重启任务
public: public:
//byte Mac[6]; //byte Mac[6];
MacAddress Mac; MacAddress Mac;

View File

@ -209,9 +209,9 @@ void NRF24L01::Init()
// 初始化地址 // 初始化地址
memset(Address, 0, ArrayLength(Address)); memset(Address, 0, ArrayLength(Address));
memcpy(Address1, (byte*)Sys.ID, ArrayLength(Address1)); memcpy(Address1, (byte*)Sys.ID, ArrayLength(Address1));
for(int i=0; i<4; i++) Addr2_5[i] = Address1[0] + i + 1; for(int i=0; i<ArrayLength(Addr2_5); i++) Addr2_5[i] = Address1[0] + i + 1;
Channel = 0; // 默认通道0 Channel = 0; // 默认通道0
AddrBits = 0x01;// 默认使能地址0 AddrBits = 0x01; // 默认使能地址0
Timeout = 50; Timeout = 50;
PayloadWidth= 32; PayloadWidth= 32;
@ -278,16 +278,9 @@ NRF24L01::~NRF24L01()
{ {
debug_printf("NRF24L01::~NRF24L01\r\n"); debug_printf("NRF24L01::~NRF24L01\r\n");
if(_tidOpen)
{
Sys.RemoveTask(_tidOpen); Sys.RemoveTask(_tidOpen);
_tidOpen = 0;
}
if(_tidOpen)
{
Sys.RemoveTask(_tidOpen); Sys.RemoveTask(_tidOpen);
_tidOpen = 0;
}
Register(NULL); Register(NULL);
// 关闭电源 // 关闭电源

View File

@ -1139,8 +1139,7 @@ void HardSocket::Register(TransportHandler handler, void* param)
} }
else else
{ {
if(_tidRecv) Sys.RemoveTask(_tidRecv); Sys.RemoveTask(_tidRecv);
_tidRecv = 0;
} }
} }
@ -1160,8 +1159,7 @@ void TcpClient::Init()
TcpClient::~TcpClient() //: ~HardSockets() TcpClient::~TcpClient() //: ~HardSockets()
{ {
HardSocket::~HardSocket(); HardSocket::~HardSocket();
if(_tidRodyguard) Sys.RemoveTask(_tidRodyguard); Sys.RemoveTask(_tidRodyguard);
_tidRodyguard = 0;
} }
void TcpClient::RodyguardTask(void* param) void TcpClient::RodyguardTask(void* param)

View File

@ -371,7 +371,7 @@ void SerialPort::Register(TransportHandler handler, void* param)
} }
else else
{ {
if(_taskidRx) Sys.RemoveTask(_taskidRx); Sys.RemoveTask(_taskidRx);
} }
} }

View File

@ -560,13 +560,16 @@ uint TSys::AddTask(Action func, void* param, Int64 dueTime, Int64 period, string
return Task::Scheduler()->Add(func, param, dueTime, period, name); return Task::Scheduler()->Add(func, param, dueTime, period, name);
} }
void TSys::RemoveTask(uint taskid) void TSys::RemoveTask(uint& taskid)
{ {
Task::Scheduler()->Remove(taskid); if(taskid) Task::Scheduler()->Remove(taskid);
taskid = 0;
} }
bool TSys::SetTask(uint taskid, bool enable, int usNextTime) bool TSys::SetTask(uint taskid, bool enable, int usNextTime)
{ {
if(!taskid) return false;
Task* task = Task::Get(taskid); Task* task = Task::Get(taskid);
if(!task) return false; if(!task) return false;
@ -584,6 +587,8 @@ bool TSys::SetTask(uint taskid, bool enable, int usNextTime)
// 改变任务周期 // 改变任务周期
bool TSys::SetTaskPeriod(uint taskid, Int64 period) bool TSys::SetTaskPeriod(uint taskid, Int64 period)
{ {
if(!taskid) return false;
Task* task = Task::Get(taskid); Task* task = Task::Get(taskid);
if(!task) return false; if(!task) return false;

2
Sys.h
View File

@ -127,7 +127,7 @@ private:
public: public:
// 创建任务返回任务编号。dueTime首次调度时间usperiod调度间隔us-1表示仅处理一次 // 创建任务返回任务编号。dueTime首次调度时间usperiod调度间隔us-1表示仅处理一次
uint AddTask(Action func, void* param, Int64 dueTime = 0, Int64 period = 0, string name = NULL); uint AddTask(Action func, void* param, Int64 dueTime = 0, Int64 period = 0, string name = NULL);
void RemoveTask(uint taskid); void RemoveTask(uint& taskid);
// 设置任务的开关状态同时运行指定任务最近一次调度的时间0表示马上调度 // 设置任务的开关状态同时运行指定任务最近一次调度的时间0表示马上调度
bool SetTask(uint taskid, bool enable, int usNextTime = -1); bool SetTask(uint taskid, bool enable, int usNextTime = -1);
// 改变任务周期 // 改变任务周期

View File

@ -53,11 +53,7 @@ void TinyClient::Open()
void TinyClient::Close() void TinyClient::Close()
{ {
if(_TaskID)
{
Sys.RemoveTask(_TaskID); Sys.RemoveTask(_TaskID);
_TaskID = 0;
}
Control->Received = NULL; Control->Received = NULL;
Control->Param = NULL; Control->Param = NULL;

View File

@ -11,7 +11,7 @@
class TinyClient class TinyClient
{ {
private: private:
int _TaskID; uint _TaskID;
public: public:
TinyController* Control; TinyController* Control;

View File

@ -188,7 +188,7 @@ TinyController::TinyController() : Controller()
TinyController::~TinyController() TinyController::~TinyController()
{ {
if(_taskID) Sys.RemoveTask(_taskID); Sys.RemoveTask(_taskID);
} }
void TinyController::Open() void TinyController::Open()

View File

@ -51,11 +51,7 @@ void TokenClient::Open()
void TokenClient::Close() void TokenClient::Close()
{ {
if(_task)
{
Sys.RemoveTask(_task); Sys.RemoveTask(_task);
_task = 0;
}
} }
bool TokenClient::Send(TokenMessage& msg) bool TokenClient::Send(TokenMessage& msg)

View File

@ -178,12 +178,10 @@ void TokenController::Open()
void TokenController::Close() void TokenController::Close()
{ {
if(!Stat)
{
delete Stat; delete Stat;
Stat = NULL; Stat = NULL;
}
if(_taskID) Sys.RemoveTask(_taskID); Sys.RemoveTask(_taskID);
} }
// 发送消息,传输口参数为空时向所有传输口发送消息 // 发送消息,传输口参数为空时向所有传输口发送消息

View File

@ -89,7 +89,7 @@ public:
private: private:
TokenStat* Stat; TokenStat* Stat;
int _taskID; uint _taskID;
void ShowStat(); void ShowStat();
static void StatTask(void* param); static void StatTask(void* param);