From bcd780993c176b93f7393607f8003adf66e6676a Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期一, 26 四月 2021 10:27:14 +0800 Subject: [PATCH] fix node default ignore msg. --- src/bh_util.h | 31 ++++++++++++++++++++++++++++--- 1 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/bh_util.h b/src/bh_util.h index bc48578..c419a59 100644 --- a/src/bh_util.h +++ b/src/bh_util.h @@ -123,13 +123,13 @@ D &operator*() const { return *p_; } }; -template <class T, class Mutex = std::mutex, class Lock = std::unique_lock<Mutex>> +template <class T, class TMutex = std::mutex, class Lock = std::unique_lock<TMutex>> class Synced { typedef T Data; - Mutex mutex_; + TMutex mutex_; Data data_; - typedef SyncedPtr<Data, Mutex, Lock> Ptr; + typedef SyncedPtr<Data, TMutex, Lock> Ptr; public: template <class... P> @@ -143,6 +143,31 @@ } }; +template <class T, class Tag> +class StaticDataRef +{ + typedef T *Ptr; + static inline Ptr &ptr() + { + static Ptr sp(nullptr); + return sp; + } + +protected: + static inline T &GetData() + { + if (!ptr()) { throw std::string("Must set ShmMsg shm before use!"); } + return *ptr(); + } + +public: + static bool SetData(T &t) + { + auto Bind = [&]() { ptr() = &t; return true; }; + return ptr() ? false : Bind(); + } +}; + // macro helper #define JOIN_IMPL(a, b) a##b #define JOIN(a, b) JOIN_IMPL(a, b) -- Gitblit v1.8.0