diff options
Diffstat (limited to 'src/zencore/include')
| -rw-r--r-- | src/zencore/include/zencore/thread.h | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/src/zencore/include/zencore/thread.h b/src/zencore/include/zencore/thread.h index 11ef01a35..9fe6dfb9b 100644 --- a/src/zencore/include/zencore/thread.h +++ b/src/zencore/include/zencore/thread.h @@ -103,16 +103,12 @@ public: ZENCORE_API Event(); ZENCORE_API ~Event(); - Event(Event&& Rhs) noexcept : m_EventHandle(Rhs.m_EventHandle) { Rhs.m_EventHandle = nullptr; } + Event(Event&& Rhs) noexcept : m_EventHandle(Rhs.m_EventHandle.load()) { Rhs.m_EventHandle = nullptr; } Event(const Event& Rhs) = delete; Event& operator=(const Event& Rhs) = delete; - inline Event& operator=(Event&& Rhs) noexcept - { - std::swap(m_EventHandle, Rhs.m_EventHandle); - return *this; - } + Event& operator=(Event&& Rhs) = delete; ZENCORE_API void Set(); ZENCORE_API void Reset(); @@ -126,7 +122,7 @@ public: protected: explicit Event(void* EventHandle) : m_EventHandle(EventHandle) {} - void* m_EventHandle = nullptr; + std::atomic<void*> m_EventHandle{nullptr}; }; /** Basic abstraction of an IPC mechanism (aka 'binary semaphore') @@ -141,16 +137,18 @@ public: ZENCORE_API std::error_code Set(); ZENCORE_API bool Wait(int TimeoutMs = -1); - NamedEvent(NamedEvent&& Rhs) noexcept : m_EventHandle(Rhs.m_EventHandle) { Rhs.m_EventHandle = nullptr; } + NamedEvent(NamedEvent&& Rhs) noexcept : m_EventHandle(Rhs.m_EventHandle.load()) { Rhs.m_EventHandle = nullptr; } - inline NamedEvent& operator=(NamedEvent&& Rhs) noexcept + NamedEvent& operator=(NamedEvent&& Rhs) { - std::swap(m_EventHandle, Rhs.m_EventHandle); + Close(); + m_EventHandle = Rhs.m_EventHandle.load(); + Rhs.m_EventHandle = nullptr; return *this; - } + }; protected: - void* m_EventHandle = nullptr; + std::atomic<void*> m_EventHandle{nullptr}; private: NamedEvent(const NamedEvent& Rhs) = delete; @@ -201,15 +199,7 @@ public: ZEN_ASSERT(Old > 0); } - bool Wait(int TimeoutMs = -1) - { - std::ptrdiff_t Old = Counter.load(); - if (Old == 0) - { - return true; - } - return Complete.Wait(TimeoutMs); - } + bool Wait(int TimeoutMs = -1) { return Complete.Wait(TimeoutMs); } private: std::atomic_ptrdiff_t Counter; |