From 9956525d462179ac11556ffa818f9a8c72b7860d Mon Sep 17 00:00:00 2001 From: Henrik Andersson Date: Sat, 4 Jun 2011 15:37:20 +0200 Subject: [PATCH] [loading window] Die thread die! --- src/arch/LoadingWindow/LoadingWindow_Win32.cpp | 9 +++++---- src/arch/LoadingWindow/LoadingWindow_Win32.h | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp index e8c1c1961c..57414399a8 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp @@ -121,12 +121,14 @@ INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wPara DeleteObject( g_hBitmap ); g_hBitmap = NULL; self->runMessageLoop=false; + self->hwnd=NULL; return TRUE; break; case WM_APP: DestroyWindow(hWnd); self->runMessageLoop=false; + ExitThread(0); return TRUE; break; } @@ -157,7 +159,7 @@ LoadingWindow_Win32::LoadingWindow_Win32() guiReadyEvent=CreateEvent(NULL,FALSE,FALSE,NULL); - CreateThread(NULL, NULL, MessagePump, (void *)this, 0, NULL); + pumpThread=CreateThread(NULL, NULL, MessagePump, (void *)this, 0, &pumpThreadId); WaitForSingleObject(guiReadyEvent,INFINITE); @@ -169,7 +171,8 @@ LoadingWindow_Win32::LoadingWindow_Win32() LoadingWindow_Win32::~LoadingWindow_Win32() { SendMessage(hwnd,WM_APP,0,0); - WaitForSingleObject(guiReadyEvent,INFINITE); + //SendMessage(hwnd,WM_NULL,0,0); + WaitForSingleObject(pumpThread,INFINITE); if(guiReadyEvent) CloseHandle(guiReadyEvent); if( m_hIcon != NULL ) @@ -192,8 +195,6 @@ DWORD WINAPI LoadingWindow_Win32::MessagePump(LPVOID thisAsVoidPtr) DispatchMessage( &msg ); } - SetEvent(self->guiReadyEvent); - return msg.wParam; } diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.h b/src/arch/LoadingWindow/LoadingWindow_Win32.h index e19e7f0a12..d1adeca283 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.h +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.h @@ -24,6 +24,7 @@ private: RString text[3]; HICON m_hIcon; HANDLE pumpThread; + DWORD pumpThreadId; HANDLE guiReadyEvent; volatile bool runMessageLoop;