From feaf1958a808725df7a2b0ede65c2733965064cd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 1 Oct 2022 08:49:23 +0800 Subject: [PATCH] 1 --- a8/xtimer.cc | 25 +++++++++++++++++++++++++ a8/xtimer.h | 5 +++++ 2 files changed, 30 insertions(+) diff --git a/a8/xtimer.cc b/a8/xtimer.cc index ebe4599..7f6e60c 100644 --- a/a8/xtimer.cc +++ b/a8/xtimer.cc @@ -123,6 +123,11 @@ static inline void InitTimerList(xtvec_base* base, xtimer_list* timer, int timer namespace a8 { + struct XTimerPtr + { + xtimer_list* timer = nullptr; + }; + XTimer::XTimer() { base_ = new xtvec_base(); @@ -443,4 +448,24 @@ namespace a8 delete node; } + std::weak_ptr XTimer::GetTimerPtr(xtimer_list* timer) + { + std::shared_ptr timer_ptr = std::make_shared(); + timer_ptr->timer = timer; + AddTimerDestoryHandle + (timer, + [timer_ptr] (xtimer_list* timer) + { + timer_ptr->timer = nullptr; + }); + return timer_ptr; + } + + void XTimer::DeleteTimer(std::weak_ptr& ptr) + { + if (!ptr.expired()) { + DeleteTimer(ptr.lock()->timer); + } + } + } diff --git a/a8/xtimer.h b/a8/xtimer.h index 7371e38..194428b 100644 --- a/a8/xtimer.h +++ b/a8/xtimer.h @@ -12,6 +12,7 @@ namespace a8 typedef void (*XTimerAfterFunc)(const a8::XParams& param); typedef long long (*XGetTickCountFunc)(void*); typedef struct list_head XTimerDestoryHandle; + struct XTimerPtr; class XTimer { @@ -53,6 +54,10 @@ namespace a8 std::function cb); //移除定时器销毁事件 void RemoveTimerDestoryHandle(XTimerDestoryHandle* handle); + //获取定时器弱引用 + std::weak_ptr GetTimerPtr(xtimer_list* timer); + //删除弱引用指向的定时器 + void DeleteTimer(std::weak_ptr& ptr); private: void UpdateTimer();