Application tear down

instead of calling Environment.Exit(0); do a better tear down of the application
This commit is contained in:
Cristian Carlesso 2018-02-14 22:20:20 +09:00
parent 69083db0c4
commit e0ab79715d
5 changed files with 29 additions and 3 deletions

View file

@ -50,6 +50,10 @@ namespace Ryujinx
using (GLScreen Screen = new GLScreen(Ns, Renderer))
{
Ns.Finish += (Sender, Args) => {
Screen.Exit();
};
Screen.Run(60.0);
}

View file

@ -4,6 +4,7 @@ using Ryujinx.OsHle.Handles;
using Ryujinx.OsHle.Utilities;
using System.Collections.Concurrent;
using System.IO;
using System;
namespace Ryujinx.OsHle
{
@ -135,6 +136,18 @@ namespace Ryujinx.OsHle
}
}
internal bool ExitProcess(int ProcessId) {
Process process;
var Success = Processes.TryRemove(ProcessId, out process);
if (Success) {
process.StopAllThreads();
}
if (Processes.Count == 0) {
Ns.OnFinish(EventArgs.Empty);
}
return Success;
}
internal bool TryGetProcess(int ProcessId, out Process Process)
{
if (!Processes.TryGetValue(ProcessId, out Process))

View file

@ -104,7 +104,7 @@ namespace Ryujinx.OsHle
{
if (MainThread != null)
{
while (MainThread.IsAlive)
if (MainThread.IsAlive)
{
MainThread.StopExecution();
}
@ -112,7 +112,7 @@ namespace Ryujinx.OsHle
foreach (AThread Thread in TlsSlots.Values)
{
while (Thread.IsAlive)
if (Thread.IsAlive)
{
Thread.StopExecution();
}

View file

@ -10,7 +10,7 @@ namespace Ryujinx.OsHle.Svc
{
private static void SvcExitProcess(Switch Ns, ARegisters Registers, AMemory Memory)
{
Environment.Exit(0);
Ns.Os.ExitProcess(Registers.ProcessId);
}
private static void SvcCloseHandle(Switch Ns, ARegisters Registers, AMemory Memory)

View file

@ -24,6 +24,15 @@ namespace Ryujinx
VFs = new VirtualFs();
}
public event EventHandler Finish;
internal virtual void OnFinish(EventArgs e)
{
EventHandler Handler = Finish;
if (Handler != null)
{
Handler(this, e);
}
}
public void Dispose()
{
Dispose(true);