openmw/components/crashcatcher/windows_crashmonitor.hpp
AnyOldName3 deb070389f Improve Windows crash/freeze catcher UX
* Change crash log to crash dump in messages.
* Make the freeze catcher popup disappear more quickly when OpenMW thaws - we got a few freeze dumps from after a thaw.
* Improve freeze catcher message - hopefully fewer users think it's a false positive they're expected to put up with and we get future reports sooner.
2025-04-12 18:38:55 +01:00

63 lines
1.4 KiB
C++

#ifndef WINDOWS_CRASHMONITOR_HPP
#define WINDOWS_CRASHMONITOR_HPP
#include <components/misc/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(bool thawMode) const;
bool isAppAlive() const;
bool isAppFrozen();
void shmLock();
void shmUnlock();
void handleCrash(bool isFreeze);
void showFreezeMessageBox();
void hideFreezeMessageBox();
};
} // namespace Crash
#endif // WINDOWS_CRASHMONITOR_HPP