Threads and Stop: How about this? A timeout only for the shutdown process? That way the shutdown can either work anyway, or crash, which is simpler than having to open the Task Manager and manually end the deadlocked process.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2401 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
John Peterson 2009-02-24 03:03:11 +00:00
parent b739dd3817
commit 5f4d304ebc
3 changed files with 5 additions and 3 deletions

View File

@ -87,11 +87,11 @@ Thread::~Thread()
WaitForDeath();
}
void Thread::WaitForDeath()
void Thread::WaitForDeath(const int _Wait)
{
if (m_hThread)
{
WaitForSingleObject(m_hThread, INFINITE);
WaitForSingleObject(m_hThread, _Wait);
CloseHandle(m_hThread);
m_hThread = NULL;
}

View File

@ -74,9 +74,9 @@ public:
void SetAffinity(int mask);
static void SetCurrentThreadAffinity(int mask);
void WaitForDeath(const int _Wait = INFINITE);
private:
void WaitForDeath();
#ifdef _WIN32
HANDLE m_hThread;

View File

@ -302,6 +302,7 @@ void Stop()
if (GetParent((HWND)g_pWindowHandle) == NULL)
#endif
#ifndef SETUP_TIMER_WAITING // This is moved
g_EmuThread->WaitForDeath(5000);
delete g_EmuThread; // Wait for emuthread to close.
g_EmuThread = 0;
#endif
@ -574,6 +575,7 @@ void EmuThreadEnd()
if (cpuThread)
{
// There is a CPU thread - join it.
cpuThread->WaitForDeath(5000);
delete cpuThread;
// Returns after game exited
cpuThread = NULL;