From b6767f355d6f5b4c6156ee9733eb2e938b881b2b Mon Sep 17 00:00:00 2001 From: Sour Date: Sat, 9 Jun 2018 15:42:27 -0400 Subject: [PATCH] Improved cleanup code on shutdown --- InteropDLL/ConsoleWrapper.cpp | 7 ++++++- Windows/WindowsKeyManager.cpp | 4 +++- Windows/WindowsKeyManager.h | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/InteropDLL/ConsoleWrapper.cpp b/InteropDLL/ConsoleWrapper.cpp index 874275b0..181d5e24 100644 --- a/InteropDLL/ConsoleWrapper.cpp +++ b/InteropDLL/ConsoleWrapper.cpp @@ -44,7 +44,7 @@ IAudioDevice *_soundManager = nullptr; IKeyManager *_keyManager = nullptr; unique_ptr _shortcutKeyHandler; -void* _windowHandle = nullptr; +void* _windowHandle = nullptr; void* _viewerHandle = nullptr; string _returnString; string _logString; @@ -341,6 +341,11 @@ namespace InteropEmu { delete _soundManager; _soundManager = nullptr; } + if(_keyManager) { + delete _keyManager; + _keyManager = nullptr; + } + _shortcutKeyHandler.reset(); } DllExport void __stdcall TakeScreenshot() { VideoDecoder::GetInstance()->TakeScreenshot(); } diff --git a/Windows/WindowsKeyManager.cpp b/Windows/WindowsKeyManager.cpp index f187a377..f3fd78b2 100644 --- a/Windows/WindowsKeyManager.cpp +++ b/Windows/WindowsKeyManager.cpp @@ -244,6 +244,7 @@ WindowsKeyManager::WindowsKeyManager(HWND hWnd) WindowsKeyManager::~WindowsKeyManager() { _stopUpdateDeviceThread = true; + _stopSignal.Signal(); _updateDeviceThread.join(); } @@ -265,7 +266,8 @@ void WindowsKeyManager::StartUpdateDeviceThread() _directInput->UpdateDeviceList(); Console::Resume(); } - std::this_thread::sleep_for(std::chrono::duration(5000)); + + _stopSignal.Wait(5000); } }); } diff --git a/Windows/WindowsKeyManager.h b/Windows/WindowsKeyManager.h index 0516820e..0722ba6e 100644 --- a/Windows/WindowsKeyManager.h +++ b/Windows/WindowsKeyManager.h @@ -4,6 +4,7 @@ #include #include "../Core/IKeyManager.h" #include "../Utilities/Timer.h" +#include "../Utilities/AutoResetEvent.h" #include "XInputManager.h" #include "DirectInputManager.h" @@ -25,6 +26,8 @@ class WindowsKeyManager : public IKeyManager std::unordered_map _keyNames; std::unordered_map _keyExtendedNames; std::unordered_map _keyCodes; + + AutoResetEvent _stopSignal; std::thread _updateDeviceThread; atomic _stopUpdateDeviceThread = false;