Stop and cleanup properly when closing application (to fix crash)

This commit is contained in:
Sour 2019-02-16 01:22:31 -05:00
parent e257db4def
commit 691175aaaa
5 changed files with 24 additions and 3 deletions

View file

@ -21,6 +21,19 @@ void Console::Initialize()
_videoRenderer->StartThread(); _videoRenderer->StartThread();
} }
void Console::Release()
{
Stop();
_videoDecoder->StopThread();
_videoRenderer->StopThread();
_videoDecoder.reset();
_videoRenderer.reset();
_debugHud.reset();
_notificationManager.reset();
}
void Console::Run() void Console::Run()
{ {
if(!_cpu) { if(!_cpu) {

View file

@ -34,6 +34,7 @@ private:
public: public:
void Initialize(); void Initialize();
void Release();
void Run(); void Run();
void Stop(); void Stop();

View file

@ -154,15 +154,13 @@ namespace InteropEmu {
DllExport void __stdcall Release() DllExport void __stdcall Release()
{ {
//_shortcutKeyHandler.reset();
_console->Stop(); _console->Stop();
_renderer.reset(); _renderer.reset();
_soundManager.reset(); _soundManager.reset();
_keyManager.reset(); _keyManager.reset();
//_console->Release(true); _console->Release();
_console.reset(); _console.reset();
//_shortcutKeyHandler.reset(); //_shortcutKeyHandler.reset();

View file

@ -29,6 +29,14 @@ namespace Mesen.GUI.Forms
EmuApi.InitializeEmu(ConfigManager.HomeFolder, Handle, ctrlRenderer.Handle, false, false, false); EmuApi.InitializeEmu(ConfigManager.HomeFolder, Handle, ctrlRenderer.Handle, false, false, false);
} }
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
EmuApi.Stop();
EmuApi.Release();
}
private void mnuTraceLogger_Click(object sender, EventArgs e) private void mnuTraceLogger_Click(object sender, EventArgs e)
{ {
frmTraceLogger frm = new frmTraceLogger(); frmTraceLogger frm = new frmTraceLogger();

View file

@ -27,6 +27,7 @@ namespace Mesen.GUI
[DllImport(DllPath)] public static extern void Release(); [DllImport(DllPath)] public static extern void Release();
[DllImport(DllPath)] public static extern void Run(); [DllImport(DllPath)] public static extern void Run();
[DllImport(DllPath)] public static extern void Stop();
[DllImport(DllPath)] public static extern void LoadRom( [DllImport(DllPath)] public static extern void LoadRom(
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Utf8Marshaler))]string filepath, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Utf8Marshaler))]string filepath,