X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ee4f8c2af9c6c5458e488db10aef7d00a89ace25..a38b83c353cce75329b2c53c0eaa4ad0f500ccf1:/src/msw/thread.cpp diff --git a/src/msw/thread.cpp b/src/msw/thread.cpp index 86bbcfea6f..a592fbf29e 100644 --- a/src/msw/thread.cpp +++ b/src/msw/thread.cpp @@ -13,6 +13,9 @@ #pragma implementation "thread.h" #endif +// this is here to regen the precompiled header in the ide compile otherwise the +// compiler crashes in vc5 (nfi why) +// For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #if defined(__BORLANDC__) @@ -41,7 +44,7 @@ enum thread_state { ///////////////////////////////////////////////////////////////////////////// static HANDLE p_mainid; -wxMutex wxMainMutex; // controls access to all GUI functions +wxMutex *wxMainMutex; // controls access to all GUI functions ///////////////////////////////////////////////////////////////////////////// // Windows implementation @@ -61,6 +64,8 @@ wxMutex::wxMutex() wxMutex::~wxMutex() { + if (m_locked > 0) + wxDebugMsg("wxMutex warning: freeing a locked mutex (%d locks)\n", m_locked); CloseHandle(p_internal->p_mutex); } @@ -231,7 +236,7 @@ void wxThread::SetPriority(int prio) p_internal->prio = prio; } -int wxThread::GetPriority() +int wxThread::GetPriority() const { return p_internal->prio; } @@ -255,10 +260,10 @@ void *wxThread::Join() return NULL; if (wxThread::IsMain()) - wxMainMutex.Unlock(); + wxMainMutex->Unlock(); WaitForSingleObject(p_internal->thread_id, INFINITE); if (wxThread::IsMain()) - wxMainMutex.Lock(); + wxMainMutex->Lock(); GetExitCodeThread(p_internal->thread_id, &exit_code); CloseHandle(p_internal->thread_id); @@ -273,7 +278,7 @@ unsigned long wxThread::GetID() const return (unsigned long)p_internal->tid; } -bool wxThread::IsMain() const +bool wxThread::IsMain() { return (GetCurrentThread() == p_mainid); } @@ -305,14 +310,16 @@ class wxThreadModule : public wxModule { DECLARE_DYNAMIC_CLASS(wxThreadModule) public: virtual bool OnInit() { + wxMainMutex = new wxMutex(); p_mainid = GetCurrentThread(); - wxMainMutex.Lock(); + wxMainMutex->Lock(); return TRUE; } // Global cleanup virtual void OnExit() { - wxMainMutex.Unlock(); + wxMainMutex->Unlock(); + delete wxMainMutex; } };