mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-03 23:26:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef WINDOWS_CRASHMONITOR_HPP
 | 
						|
#define WINDOWS_CRASHMONITOR_HPP
 | 
						|
 | 
						|
#include <components/windows.hpp>
 | 
						|
 | 
						|
#include <atomic>
 | 
						|
#include <unordered_map>
 | 
						|
 | 
						|
namespace Crash
 | 
						|
{
 | 
						|
 | 
						|
struct CrashSHM;
 | 
						|
 | 
						|
class CrashMonitor final
 | 
						|
{
 | 
						|
public:
 | 
						|
 | 
						|
    CrashMonitor(HANDLE shmHandle);
 | 
						|
 | 
						|
    ~CrashMonitor();
 | 
						|
 | 
						|
    void run();
 | 
						|
 | 
						|
private:
 | 
						|
 | 
						|
    HANDLE mAppProcessHandle = nullptr;
 | 
						|
    DWORD mAppMainThreadId = 0;
 | 
						|
    HWND mAppWindowHandle = nullptr;
 | 
						|
 | 
						|
    // triggered when the monitor process wants to wake the parent process (received via SHM)
 | 
						|
    HANDLE mSignalAppEvent = nullptr;
 | 
						|
    // triggered when the application wants to wake the monitor process (received via SHM)
 | 
						|
    HANDLE mSignalMonitorEvent = nullptr;
 | 
						|
 | 
						|
    CrashSHM* mShm = nullptr;
 | 
						|
    HANDLE mShmHandle = nullptr;
 | 
						|
    HANDLE mShmMutex = nullptr;
 | 
						|
 | 
						|
    DWORD mFreezeMessageBoxThreadId = 0;
 | 
						|
    std::atomic_bool mFreezeAbort;
 | 
						|
 | 
						|
    static std::unordered_map<HWINEVENTHOOK, CrashMonitor*> smEventHookOwners;
 | 
						|
 | 
						|
    void signalApp() const;
 | 
						|
 | 
						|
    bool waitApp() const;
 | 
						|
 | 
						|
    bool isAppAlive() const;
 | 
						|
 | 
						|
    bool isAppFrozen();
 | 
						|
 | 
						|
    void shmLock();
 | 
						|
 | 
						|
    void shmUnlock();
 | 
						|
 | 
						|
    void handleCrash();
 | 
						|
 | 
						|
    void showFreezeMessageBox();
 | 
						|
 | 
						|
    void hideFreezeMessageBox();
 | 
						|
};
 | 
						|
 | 
						|
} // namespace Crash
 | 
						|
 | 
						|
#endif // WINDOWS_CRASHMONITOR_HPP
 |