Update EventListener & EventDispatcher
This commit is contained in:
parent
11c43a0731
commit
bd20606041
|
|
@ -58,12 +58,12 @@ namespace kiwano
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action* ActionManager::GetAction(String const & name)
|
ActionPtr ActionManager::GetAction(String const & name)
|
||||||
{
|
{
|
||||||
if (actions_.empty())
|
if (actions_.empty())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
for (auto action = actions_.first_item().get(); action; action = action->next_item().get())
|
for (auto& action : actions_)
|
||||||
if (action->IsName(name))
|
if (action->IsName(name))
|
||||||
return action;
|
return action;
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ namespace kiwano
|
||||||
if (actions_.empty())
|
if (actions_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (auto action = actions_.first_item().get(); action; action = action->next_item().get())
|
for (auto& action : actions_)
|
||||||
{
|
{
|
||||||
action->Resume();
|
action->Resume();
|
||||||
}
|
}
|
||||||
|
|
@ -86,7 +86,7 @@ namespace kiwano
|
||||||
if (actions_.empty())
|
if (actions_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (auto action = actions_.first_item().get(); action; action = action->next_item().get())
|
for (auto& action : actions_)
|
||||||
{
|
{
|
||||||
action->Pause();
|
action->Pause();
|
||||||
}
|
}
|
||||||
|
|
@ -97,7 +97,7 @@ namespace kiwano
|
||||||
if (actions_.empty())
|
if (actions_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (auto action = actions_.first_item().get(); action; action = action->next_item().get())
|
for (auto& action : actions_)
|
||||||
{
|
{
|
||||||
action->Stop();
|
action->Stop();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ namespace kiwano
|
||||||
/// \~chinese
|
/// \~chinese
|
||||||
/// @brief 获取指定名称的动画
|
/// @brief 获取指定名称的动画
|
||||||
/// @param name 动画名称
|
/// @param name 动画名称
|
||||||
Action* GetAction(String const& name);
|
ActionPtr GetAction(String const& name);
|
||||||
|
|
||||||
/// \~chinese
|
/// \~chinese
|
||||||
/// @brief 继续所有暂停动画
|
/// @brief 继续所有暂停动画
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,11 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
listener->callback_(evt);
|
listener->callback_(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (listener->IsRemoveable())
|
||||||
|
{
|
||||||
|
listeners_.remove(listener);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,7 +75,7 @@ namespace kiwano
|
||||||
|
|
||||||
void EventDispatcher::StartListeners(String const & listener_name)
|
void EventDispatcher::StartListeners(String const & listener_name)
|
||||||
{
|
{
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = listener->next_item())
|
for (auto& listener : listeners_)
|
||||||
{
|
{
|
||||||
if (listener->IsName(listener_name))
|
if (listener->IsName(listener_name))
|
||||||
{
|
{
|
||||||
|
|
@ -81,7 +86,7 @@ namespace kiwano
|
||||||
|
|
||||||
void EventDispatcher::StopListeners(String const & listener_name)
|
void EventDispatcher::StopListeners(String const & listener_name)
|
||||||
{
|
{
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = listener->next_item())
|
for (auto& listener : listeners_)
|
||||||
{
|
{
|
||||||
if (listener->IsName(listener_name))
|
if (listener->IsName(listener_name))
|
||||||
{
|
{
|
||||||
|
|
@ -92,21 +97,18 @@ namespace kiwano
|
||||||
|
|
||||||
void EventDispatcher::RemoveListeners(String const & listener_name)
|
void EventDispatcher::RemoveListeners(String const & listener_name)
|
||||||
{
|
{
|
||||||
EventListenerPtr next;
|
for (auto& listener : listeners_)
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = next)
|
|
||||||
{
|
{
|
||||||
next = listener->next_item();
|
|
||||||
|
|
||||||
if (listener->IsName(listener_name))
|
if (listener->IsName(listener_name))
|
||||||
{
|
{
|
||||||
listeners_.remove(listener);
|
listener->Remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventDispatcher::StartListeners(const EventType& type)
|
void EventDispatcher::StartListeners(const EventType& type)
|
||||||
{
|
{
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = listener->next_item())
|
for (auto& listener : listeners_)
|
||||||
{
|
{
|
||||||
if (listener->type_ == type)
|
if (listener->type_ == type)
|
||||||
{
|
{
|
||||||
|
|
@ -117,7 +119,7 @@ namespace kiwano
|
||||||
|
|
||||||
void EventDispatcher::StopListeners(const EventType& type)
|
void EventDispatcher::StopListeners(const EventType& type)
|
||||||
{
|
{
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = listener->next_item())
|
for (auto& listener : listeners_)
|
||||||
{
|
{
|
||||||
if (listener->type_ == type)
|
if (listener->type_ == type)
|
||||||
{
|
{
|
||||||
|
|
@ -128,16 +130,42 @@ namespace kiwano
|
||||||
|
|
||||||
void EventDispatcher::RemoveListeners(const EventType& type)
|
void EventDispatcher::RemoveListeners(const EventType& type)
|
||||||
{
|
{
|
||||||
EventListenerPtr next;
|
for (auto& listener : listeners_)
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = next)
|
|
||||||
{
|
{
|
||||||
next = listener->next_item();
|
|
||||||
|
|
||||||
if (listener->type_ == type)
|
if (listener->type_ == type)
|
||||||
{
|
{
|
||||||
listeners_.remove(listener);
|
listener->Remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventDispatcher::StartAllListeners()
|
||||||
|
{
|
||||||
|
for (auto& listener : listeners_)
|
||||||
|
{
|
||||||
|
listener->Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventDispatcher::StopAllListeners()
|
||||||
|
{
|
||||||
|
for (auto& listener : listeners_)
|
||||||
|
{
|
||||||
|
listener->Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventDispatcher::RemoveAllListeners()
|
||||||
|
{
|
||||||
|
for (auto& listener : listeners_)
|
||||||
|
{
|
||||||
|
listener->Remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const EventDispatcher::Listeners& EventDispatcher::GetAllListeners() const
|
||||||
|
{
|
||||||
|
return listeners_;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,34 +23,40 @@
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 事件分发系统
|
||||||
|
*/
|
||||||
class KGE_API EventDispatcher
|
class KGE_API EventDispatcher
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
using Listeners = IntrusiveList<EventListenerPtr>;
|
using Listeners = IntrusiveList<EventListenerPtr>;
|
||||||
|
|
||||||
public:
|
/// \~chinese
|
||||||
// 添加监听器
|
/// @brief 添加监听器
|
||||||
EventListener* AddListener(
|
EventListener* AddListener(EventListenerPtr listener);
|
||||||
EventListenerPtr listener
|
|
||||||
);
|
|
||||||
|
|
||||||
// 添加监听器
|
/// \~chinese
|
||||||
EventListener* AddListener(
|
/// @brief 添加监听器
|
||||||
EventListener* listener
|
EventListener* AddListener(EventListener* listener);
|
||||||
);
|
|
||||||
|
|
||||||
// 添加监听器
|
/// \~chinese
|
||||||
EventListener* AddListener(
|
/// @brief 添加监听器
|
||||||
EventType type,
|
/// @param type 监听的事件类型
|
||||||
EventListener::Callback callback
|
/// @param callback 回调函数
|
||||||
);
|
EventListener* AddListener(EventType type, EventListener::Callback callback);
|
||||||
|
|
||||||
// 添加监听器
|
/// \~chinese
|
||||||
EventListener* AddListener(
|
/// @brief 添加监听器
|
||||||
String const& name,
|
/// @param name 监听器名称
|
||||||
EventType type,
|
/// @param type 监听的事件类型
|
||||||
EventListener::Callback callback
|
/// @param callback 回调函数
|
||||||
);
|
EventListener* AddListener(String const& name, EventType type, EventListener::Callback callback);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 添加监听器
|
||||||
|
/// @tparam _EventTy 事件类型
|
||||||
|
/// @param callback 回调函数
|
||||||
template <
|
template <
|
||||||
typename _EventTy,
|
typename _EventTy,
|
||||||
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type
|
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type
|
||||||
|
|
@ -60,6 +66,11 @@ namespace kiwano
|
||||||
return AddListener(KGE_EVENT(_EventTy), callback);
|
return AddListener(KGE_EVENT(_EventTy), callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 添加监听器
|
||||||
|
/// @tparam _EventTy 事件类型
|
||||||
|
/// @param name 监听器名称
|
||||||
|
/// @param callback 回调函数
|
||||||
template <
|
template <
|
||||||
typename _EventTy,
|
typename _EventTy,
|
||||||
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>
|
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>
|
||||||
|
|
@ -69,36 +80,55 @@ namespace kiwano
|
||||||
return AddListener(name, KGE_EVENT(_EventTy), callback);
|
return AddListener(name, KGE_EVENT(_EventTy), callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 启动监听器
|
/// \~chinese
|
||||||
void StartListeners(
|
/// @brief 启动监听器
|
||||||
String const& listener_name
|
/// @param name 监听器名称
|
||||||
);
|
void StartListeners(String const& name);
|
||||||
|
|
||||||
// 停止监听器
|
/// \~chinese
|
||||||
void StopListeners(
|
/// @brief 停止监听器
|
||||||
String const& listener_name
|
/// @param name 监听器名称
|
||||||
);
|
void StopListeners(String const& name);
|
||||||
|
|
||||||
// 移除监听器
|
/// \~chinese
|
||||||
void RemoveListeners(
|
/// @brief 移除监听器
|
||||||
String const& listener_name
|
/// @param name 监听器名称
|
||||||
);
|
void RemoveListeners(String const& name);
|
||||||
|
|
||||||
// 启动监听器
|
/// \~chinese
|
||||||
void StartListeners(
|
/// @brief 启动监听器
|
||||||
const EventType& type
|
/// @param type 监听的事件类型
|
||||||
);
|
void StartListeners(const EventType& type);
|
||||||
|
|
||||||
// 停止监听器
|
/// \~chinese
|
||||||
void StopListeners(
|
/// @brief 停止监听器
|
||||||
const EventType& type
|
/// @param type 监听的事件类型
|
||||||
);
|
void StopListeners(const EventType& type);
|
||||||
|
|
||||||
// 移除监听器
|
/// \~chinese
|
||||||
void RemoveListeners(
|
/// @brief 移除监听器
|
||||||
const EventType& type
|
/// @param type 监听的事件类型
|
||||||
);
|
void RemoveListeners(const EventType& type);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 启动所有监听器
|
||||||
|
void StartAllListeners();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 停止所有监听器
|
||||||
|
void StopAllListeners();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 移除所有监听器
|
||||||
|
void RemoveAllListeners();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 获取所有监听器
|
||||||
|
const Listeners& GetAllListeners() const;
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 分发事件
|
||||||
|
/// @param evt 事件
|
||||||
virtual void Dispatch(Event& evt);
|
virtual void Dispatch(Event& evt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ namespace kiwano
|
||||||
: type_()
|
: type_()
|
||||||
, callback_()
|
, callback_()
|
||||||
, running_(true)
|
, running_(true)
|
||||||
|
, removeable_(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,10 @@ namespace kiwano
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(EventListener);
|
KGE_DECLARE_SMART_PTR(EventListener);
|
||||||
|
|
||||||
// ʼþ¼àÌýÆ÷
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 事件监听器
|
||||||
|
*/
|
||||||
class KGE_API EventListener
|
class KGE_API EventListener
|
||||||
: public ObjectBase
|
: public ObjectBase
|
||||||
, protected IntrusiveListItem<EventListenerPtr>
|
, protected IntrusiveListItem<EventListenerPtr>
|
||||||
|
|
@ -39,57 +42,107 @@ namespace kiwano
|
||||||
friend IntrusiveList<EventListenerPtr>;
|
friend IntrusiveList<EventListenerPtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 监听器回调函数
|
||||||
using Callback = Function<void(Event&)>;
|
using Callback = Function<void(Event&)>;
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 构造空监听器
|
||||||
EventListener();
|
EventListener();
|
||||||
|
|
||||||
EventListener(
|
/// \~chinese
|
||||||
EventType type,
|
/// @brief 构造监听器
|
||||||
Callback const& callback
|
/// @param type 监听的事件类型
|
||||||
);
|
/// @param callback 回调函数
|
||||||
|
EventListener(EventType type, Callback const& callback);
|
||||||
|
|
||||||
EventListener(
|
/// \~chinese
|
||||||
String const& name,
|
/// @brief 构造监听器
|
||||||
EventType type,
|
/// @param name 监听器名称
|
||||||
Callback const& callback
|
/// @param type 监听的事件类型
|
||||||
);
|
/// @param callback 回调函数
|
||||||
|
EventListener(String const& name, EventType type, Callback const& callback);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 构造监听器
|
||||||
|
/// @tparam _EventTy 事件类型
|
||||||
|
/// @param callback 回调函数
|
||||||
template <
|
template <
|
||||||
typename _EventTy,
|
typename _EventTy,
|
||||||
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type
|
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type
|
||||||
>
|
>
|
||||||
EventListener(Callback const& callback)
|
inline EventListener(Callback const& callback)
|
||||||
: EventListener(KGE_EVENT(_EventTy), callback)
|
: EventListener(KGE_EVENT(_EventTy), callback)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 构造监听器
|
||||||
|
/// @tparam _EventTy 事件类型
|
||||||
|
/// @param name 监听器名称
|
||||||
|
/// @param callback 回调函数
|
||||||
template <
|
template <
|
||||||
typename _EventTy,
|
typename _EventTy,
|
||||||
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type
|
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type
|
||||||
>
|
>
|
||||||
EventListener(String const& name, Callback const& callback)
|
inline EventListener(String const& name, Callback const& callback)
|
||||||
: EventListener(name, KGE_EVENT(_EventTy), callback)
|
: EventListener(name, KGE_EVENT(_EventTy), callback)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~EventListener();
|
virtual ~EventListener();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 启动监听器
|
||||||
void Start();
|
void Start();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 停止监听器
|
||||||
void Stop();
|
void Stop();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 移除监听器
|
||||||
|
void Remove();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 是否正在运行
|
||||||
bool IsRunning() const;
|
bool IsRunning() const;
|
||||||
|
|
||||||
Callback GetCallback() const;
|
/// \~chinese
|
||||||
|
/// @brief 是否可移除
|
||||||
|
bool IsRemoveable() const;
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 获取回调函数
|
||||||
|
const Callback& GetCallback() const;
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 设置回调函数
|
||||||
void SetCallback(Callback const& cb);
|
void SetCallback(Callback const& cb);
|
||||||
|
|
||||||
EventType const& GetEventType() const;
|
/// \~chinese
|
||||||
|
/// @brief 获取监听的事件类型
|
||||||
|
EventType GetEventType() const;
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 设置监听的事件类型
|
||||||
void SetEventType(EventType const& type);
|
void SetEventType(EventType const& type);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 设置监听的事件类型
|
||||||
|
/// @tparam _EventTy 事件类型
|
||||||
|
template <
|
||||||
|
typename _EventTy,
|
||||||
|
typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type
|
||||||
|
>
|
||||||
|
inline void SetEventType()
|
||||||
|
{
|
||||||
|
SetEventType(KGE_EVENT(_EventTy));
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool running_;
|
bool running_;
|
||||||
|
bool removeable_;
|
||||||
EventType type_;
|
EventType type_;
|
||||||
Callback callback_;
|
Callback callback_;
|
||||||
};
|
};
|
||||||
|
|
@ -105,12 +158,22 @@ namespace kiwano
|
||||||
running_ = false;
|
running_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void EventListener::Remove()
|
||||||
|
{
|
||||||
|
removeable_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
inline bool EventListener::IsRunning() const
|
inline bool EventListener::IsRunning() const
|
||||||
{
|
{
|
||||||
return running_;
|
return running_;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline EventListener::Callback EventListener::GetCallback() const
|
inline bool EventListener::IsRemoveable() const
|
||||||
|
{
|
||||||
|
return removeable_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const EventListener::Callback& EventListener::GetCallback() const
|
||||||
{
|
{
|
||||||
return callback_;
|
return callback_;
|
||||||
}
|
}
|
||||||
|
|
@ -120,7 +183,7 @@ namespace kiwano
|
||||||
callback_ = cb;
|
callback_ = cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline EventType const& EventListener::GetEventType() const
|
inline EventType EventListener::GetEventType() const
|
||||||
{
|
{
|
||||||
return type_;
|
return type_;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,22 +24,45 @@
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
// DLL ¿â
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief DLL库
|
||||||
|
*/
|
||||||
class KGE_API Library
|
class KGE_API Library
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 构造DLL库
|
||||||
Library();
|
Library();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 构造DLL库
|
||||||
|
/// @param lib DLL文件路径
|
||||||
Library(String const& lib);
|
Library(String const& lib);
|
||||||
|
|
||||||
virtual ~Library();
|
virtual ~Library();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 加载DLL
|
||||||
|
/// @param lib DLL文件路径
|
||||||
bool Load(String const& lib);
|
bool Load(String const& lib);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 是否有效
|
||||||
bool IsValid() const;
|
bool IsValid() const;
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 释放DLL
|
||||||
void Free();
|
void Free();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 检索指定的DLL中的输出库函数地址
|
||||||
|
/// @param proc_name 函数名
|
||||||
FARPROC GetProcess(String const& proc_name);
|
FARPROC GetProcess(String const& proc_name);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 检索指定的DLL中的输出库函数地址
|
||||||
|
/// @param proc_name 函数名
|
||||||
template <typename _Proc>
|
template <typename _Proc>
|
||||||
inline _Proc GetProcess(String const& proc_name)
|
inline _Proc GetProcess(String const& proc_name)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -72,14 +72,24 @@ namespace kiwano
|
||||||
String DumpObject();
|
String DumpObject();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 是否启用了内存泄漏追踪
|
||||||
static bool IsTracingLeaks();
|
static bool IsTracingLeaks();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 开始追踪内存泄漏
|
||||||
static void StartTracingLeaks();
|
static void StartTracingLeaks();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 停止追踪内存泄漏
|
||||||
static void StopTracingLeaks();
|
static void StopTracingLeaks();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 打印所有追踪中的对象信息
|
||||||
static void DumpTracingObjects();
|
static void DumpTracingObjects();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 获取所有追踪中的对象
|
||||||
static Vector<ObjectBase*>& GetTracingObjects();
|
static Vector<ObjectBase*>& GetTracingObjects();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ namespace kiwano
|
||||||
if (timers_.empty())
|
if (timers_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (auto timer = timers_.first_item().get(); timer; timer = timer->next_item().get())
|
for (auto& timer : timers_)
|
||||||
{
|
{
|
||||||
if (timer->IsName(name))
|
if (timer->IsName(name))
|
||||||
{
|
{
|
||||||
|
|
@ -83,7 +83,7 @@ namespace kiwano
|
||||||
if (timers_.empty())
|
if (timers_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (auto timer = timers_.first_item().get(); timer; timer = timer->next_item().get())
|
for (auto& timer : timers_)
|
||||||
{
|
{
|
||||||
if (timer->IsName(name))
|
if (timer->IsName(name))
|
||||||
{
|
{
|
||||||
|
|
@ -97,10 +97,8 @@ namespace kiwano
|
||||||
if (timers_.empty())
|
if (timers_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TimerPtr next;
|
for (auto& timer : timers_)
|
||||||
for (auto timer = timers_.first_item(); timer; timer = next)
|
|
||||||
{
|
{
|
||||||
next = timer->next_item();
|
|
||||||
if (timer->IsName(name))
|
if (timer->IsName(name))
|
||||||
{
|
{
|
||||||
timer->Remove();
|
timer->Remove();
|
||||||
|
|
@ -113,7 +111,7 @@ namespace kiwano
|
||||||
if (timers_.empty())
|
if (timers_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (auto timer = timers_.first_item().get(); timer; timer = timer->next_item().get())
|
for (auto& timer : timers_)
|
||||||
{
|
{
|
||||||
timer->Stop();
|
timer->Stop();
|
||||||
}
|
}
|
||||||
|
|
@ -124,7 +122,7 @@ namespace kiwano
|
||||||
if (timers_.empty())
|
if (timers_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (auto timer = timers_.first_item().get(); timer; timer = timer->next_item().get())
|
for (auto& timer : timers_)
|
||||||
{
|
{
|
||||||
timer->Start();
|
timer->Start();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue