8 #ifndef WPIUTIL_WPI_SAFETHREAD_H_
9 #define WPIUTIL_WPI_SAFETHREAD_H_
16 #include "wpi/condition_variable.h"
17 #include "wpi/mutex.h"
26 virtual void Main() = 0;
28 mutable wpi::mutex m_mutex;
29 std::atomic_bool m_active;
30 wpi::condition_variable m_cond;
39 explicit operator bool()
const {
return m_thread !=
nullptr; }
40 std::unique_lock<wpi::mutex>& GetLock() {
return m_lock; }
43 std::shared_ptr<SafeThread> m_thread;
44 std::unique_lock<wpi::mutex> m_lock;
54 T& operator*()
const {
return *
static_cast<T*
>(m_thread.get()); }
55 T* operator->()
const {
return static_cast<T*
>(m_thread.get()); }
78 explicit operator bool()
const;
80 std::thread::native_handle_type GetNativeThreadHandle()
const;
83 void Start(std::shared_ptr<SafeThread> thr);
84 std::shared_ptr<SafeThread> GetThread()
const;
87 mutable wpi::mutex m_mutex;
88 std::weak_ptr<SafeThread> m_thread;
89 std::thread::native_handle_type m_nativeHandle;
99 template <
typename... Args>
100 void Start(Args&&... args) {
101 detail::SafeThreadOwnerBase::Start(
102 std::make_shared<T>(std::forward<Args>(args)...));
106 Proxy GetThread()
const {
107 return Proxy(detail::SafeThreadOwnerBase::GetThread());
113 #endif // WPIUTIL_WPI_SAFETHREAD_H_
Definition: SafeThread.h:50
Definition: SafeThread.h:22
Definition: SafeThread.h:97
WPILib C++ utilities (wpiutil) namespace.
Definition: SmallString.h:21
Definition: SafeThread.h:59
Definition: SafeThread.h:36