win32: safer threading logic in shutdown sequence

This commit is contained in:
zeromus 2009-07-28 05:12:23 +00:00
parent 7219f88382
commit 11e417f55a
1 changed files with 15 additions and 4 deletions

View File

@ -827,6 +827,7 @@ volatile int currDisplayBuffer=-1;
volatile int newestDisplayBuffer=-2;
GMutex *display_mutex = NULL;
GThread *display_thread = NULL;
volatile bool display_die = false;
static void DoDisplay_DrawHud()
{
@ -901,11 +902,18 @@ void displayProc()
void displayThread(void*)
{
for(;;) {
if(display_die) return;
displayProc();
Sleep(10); //don't be greedy and use a whole cpu core, but leave room for 60fps
}
}
void KillDisplay()
{
display_die = true;
g_thread_join(display_thread);
}
void Display()
{
CallRegisteredLuaFunctions(LUACALL_AFTEREMULATIONGUI);
@ -1185,10 +1193,6 @@ fps=0;
Sleep(100);
}
if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary);
if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface);
if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface);
if (lpDDraw != NULL) IDirectDraw7_Release(lpDDraw);
return 1;
}
@ -1890,6 +1894,13 @@ int _main()
delete MainWindow;
KillDisplay();
if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary);
if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface);
if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface);
if (lpDDraw != NULL) IDirectDraw7_Release(lpDDraw);
return 0;
}