优化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;
_spi = NULL;
if(_ResetTask) Sys.RemoveTask(_ResetTask);
Sys.RemoveTask(_ResetTask);
}
void Enc28j60::Init(Spi* spi, Pin ce, Pin reset)

View File

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

View File

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

View File

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

View File

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

11
Sys.cpp
View File

@ -114,7 +114,7 @@ bool SysError(uint code)
#if DEBUG
ShowFault(code);
SerialPort* sp = SerialPort::GetMessagePort();
if(sp) sp->Flush();
#endif
@ -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);
}
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)
{
if(!taskid) return false;
Task* task = Task::Get(taskid);
if(!task) return false;
@ -584,6 +587,8 @@ bool TSys::SetTask(uint taskid, bool enable, int usNextTime)
// 改变任务周期
bool TSys::SetTaskPeriod(uint taskid, Int64 period)
{
if(!taskid) return false;
Task* task = Task::Get(taskid);
if(!task) return false;

2
Sys.h
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -87,9 +87,9 @@ public:
// 统计
private:
TokenStat* Stat;
TokenStat* Stat;
int _taskID;
uint _taskID;
void ShowStat();
static void StatTask(void* param);