#pragma once #include "memory/Memory.hpp" #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; UP m_pWatchdog; std::mutex m_mWatchdogMutex; std::atomic m_bNotified = false; std::atomic m_bExitThread = false; std::condition_variable m_cvWatchdogCondition; }; inline UP g_pWatchdog;