#pragma once #include #include #include #include class CWatchdog { public: // must be called from the main thread CWatchdog(); ~CWatchdog(); void startWatching(); void endWatching(); std::atomic m_bWatchdogInitialized{false}; private: std::chrono::high_resolution_clock::time_point m_tTriggered; pthread_t m_iMainThreadPID = 0; std::atomic m_bWatching = false; std::atomic m_bWillWatch = false; std::unique_ptr m_pWatchdog; std::mutex m_mWatchdogMutex; std::atomic m_bNotified = false; std::atomic m_bExitThread = false; std::condition_variable m_cvWatchdogCondition; }; inline std::unique_ptr g_pWatchdog;