8 #ifndef NT_SAFETHREAD_H_
9 #define NT_SAFETHREAD_H_
12 #include <condition_variable>
22 virtual void Main() = 0;
26 std::condition_variable m_cond;
35 if (!m_thread)
return;
36 std::unique_lock<std::mutex>(m_thread->m_mutex).swap(m_lock);
37 if (!m_thread->m_active) {
43 explicit operator bool()
const {
return m_thread !=
nullptr; }
44 std::unique_lock<std::mutex>& GetLock() {
return m_lock; }
48 std::unique_lock<std::mutex> m_lock;
57 T& operator*()
const {
return *
static_cast<T*
>(m_thread); }
58 T* operator->()
const {
return static_cast<T*
>(m_thread); }
73 SafeThread* GetThread() {
return m_thread.load(); }
76 std::atomic<SafeThread*> m_thread;
84 void Start() { Start(
new T); }
85 void Start(T* thr) { detail::SafeThreadOwnerBase::Start(thr); }
88 Proxy GetThread() {
return Proxy(detail::SafeThreadOwnerBase::GetThread()); }
93 #endif // NT_SAFETHREAD_H_
Definition: SafeThread.h:82
Definition: SafeThread.h:19
Definition: SafeThread.h:54
Definition: SafeThread.h:32
Definition: SafeThread.h:62