1
This commit is contained in:
parent
5ac8b9be91
commit
1c1903fab1
@ -22,7 +22,7 @@ namespace a8
|
|||||||
|
|
||||||
const int TIMER_EXEC_EVENT = 1;
|
const int TIMER_EXEC_EVENT = 1;
|
||||||
const int TIMER_DELETE_EVENT = 2;
|
const int TIMER_DELETE_EVENT = 2;
|
||||||
const int TIMER_DESTORY_EVNET = 3;
|
const int TIMER_DESTORY_EVENT = 3;
|
||||||
const int TIMER_USER_EVNET = 66;
|
const int TIMER_USER_EVENT = 66;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
55
a8/xtimer.cc
55
a8/xtimer.cc
@ -203,7 +203,7 @@ namespace a8
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDelete(xtimer_list* timer)
|
void InternalDelete(xtimer_list* timer, bool is_destory, bool to_free_list)
|
||||||
{
|
{
|
||||||
if (!timer) {
|
if (!timer) {
|
||||||
abort();
|
abort();
|
||||||
@ -211,13 +211,19 @@ namespace a8
|
|||||||
if (base_->running_timer == timer) {
|
if (base_->running_timer == timer) {
|
||||||
base_->running_timer = nullptr;
|
base_->running_timer = nullptr;
|
||||||
}
|
}
|
||||||
if (timer->cb) {
|
|
||||||
timer->cb(TIMER_DELETE_EVENT, nullptr);
|
|
||||||
}
|
|
||||||
DetachTimer(timer);
|
DetachTimer(timer);
|
||||||
if (!list_empty(&timer->attach_entry)) {
|
if (!list_empty(&timer->attach_entry)) {
|
||||||
list_del_init(&timer->attach_entry);
|
list_del_init(&timer->attach_entry);
|
||||||
}
|
}
|
||||||
|
if (is_destory) {
|
||||||
|
if (timer->cb) {
|
||||||
|
timer->cb(TIMER_DESTORY_EVENT, nullptr);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (timer->cb) {
|
||||||
|
timer->cb(TIMER_DELETE_EVENT, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
while (!list_empty(&timer->destory_handle_list)) {
|
while (!list_empty(&timer->destory_handle_list)) {
|
||||||
XTimerDestoryHandleNode* node = list_first_entry(&timer->destory_handle_list,
|
XTimerDestoryHandleNode* node = list_first_entry(&timer->destory_handle_list,
|
||||||
XTimerDestoryHandleNode,
|
XTimerDestoryHandleNode,
|
||||||
@ -226,7 +232,11 @@ namespace a8
|
|||||||
node->cb(timer);
|
node->cb(timer);
|
||||||
delete node;
|
delete node;
|
||||||
}
|
}
|
||||||
AddToFreeList(timer);
|
if (to_free_list) {
|
||||||
|
AddToFreeList(timer);
|
||||||
|
} else {
|
||||||
|
delete timer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalModifyTime(xtimer_list* timer, int expire_time)
|
void InternalModifyTime(xtimer_list* timer, int expire_time)
|
||||||
@ -284,22 +294,7 @@ namespace a8
|
|||||||
switch (timer->timer_type) {
|
switch (timer->timer_type) {
|
||||||
case kTimeOutTimer:
|
case kTimeOutTimer:
|
||||||
{
|
{
|
||||||
DetachTimer(timer);
|
InternalDelete(timer, false, true);
|
||||||
if (!list_empty(&timer->attach_entry)) {
|
|
||||||
list_del_init(&timer->attach_entry);
|
|
||||||
}
|
|
||||||
while (!list_empty(&timer->destory_handle_list)) {
|
|
||||||
XTimerDestoryHandleNode* node = list_first_entry(&timer->destory_handle_list,
|
|
||||||
XTimerDestoryHandleNode,
|
|
||||||
entry);
|
|
||||||
list_del_init(&node->entry);
|
|
||||||
node->cb(timer);
|
|
||||||
delete node;
|
|
||||||
}
|
|
||||||
AddToFreeList(timer);
|
|
||||||
if (timer->cb) {
|
|
||||||
timer->cb(TIMER_DELETE_EVENT, nullptr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -315,7 +310,7 @@ namespace a8
|
|||||||
|
|
||||||
void DeleteCurrentTimer()
|
void DeleteCurrentTimer()
|
||||||
{
|
{
|
||||||
InternalDelete(base_->running_timer);
|
InternalDelete(base_->running_timer, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -359,19 +354,7 @@ namespace a8
|
|||||||
while (!list_empty(head)) {
|
while (!list_empty(head)) {
|
||||||
struct xtimer_list *timer;
|
struct xtimer_list *timer;
|
||||||
timer = list_first_entry(head, struct xtimer_list,entry);
|
timer = list_first_entry(head, struct xtimer_list,entry);
|
||||||
DetachTimer(timer);
|
InternalDelete(timer, true, false);
|
||||||
if (!list_empty(&timer->attach_entry)) {
|
|
||||||
list_del_init(&timer->attach_entry);
|
|
||||||
}
|
|
||||||
while (!list_empty(&timer->destory_handle_list)) {
|
|
||||||
XTimerDestoryHandleNode* node = list_first_entry(&timer->destory_handle_list,
|
|
||||||
XTimerDestoryHandleNode,
|
|
||||||
entry);
|
|
||||||
list_del_init(&node->entry);
|
|
||||||
node->cb(timer);
|
|
||||||
delete node;
|
|
||||||
}
|
|
||||||
delete timer;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
for (int j = 0; j < TVN_SIZE; j++) {
|
for (int j = 0; j < TVN_SIZE; j++) {
|
||||||
@ -528,7 +511,7 @@ namespace a8
|
|||||||
if (timer_wp.expired()) {
|
if (timer_wp.expired()) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
impl_->InternalDelete(timer_wp.lock()->timer);
|
impl_->InternalDelete(timer_wp.lock()->timer, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
long long XTimer::GetRemainTime(XTimerWp& timer_wp)
|
long long XTimer::GetRemainTime(XTimerWp& timer_wp)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user