X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b95a7c314446677c62f646ce76f9121b4537a81e..8a31648287be0ef976f133de2786b137f1e98340:/src/msw/thread.cpp diff --git a/src/msw/thread.cpp b/src/msw/thread.cpp index 399a2837b5..d57bbb9b0f 100644 --- a/src/msw/thread.cpp +++ b/src/msw/thread.cpp @@ -40,6 +40,8 @@ #include "wx/except.h" +#include "wx/dynlib.h" + // must have this symbol defined to get _beginthread/_endthread declarations #ifndef _MT #define _MT @@ -163,6 +165,25 @@ void wxCriticalSection::Enter() ::EnterCriticalSection((CRITICAL_SECTION *)m_buffer); } +bool wxCriticalSection::TryEnter() +{ +#if wxUSE_DYNLIB_CLASS + typedef BOOL + (WINAPI *TryEnterCriticalSection_t)(LPCRITICAL_SECTION lpCriticalSection); + + static TryEnterCriticalSection_t + pfnTryEnterCriticalSection = (TryEnterCriticalSection_t) + wxDynamicLibrary(wxT("kernel32.dll")). + GetSymbol(wxT("TryEnterCriticalSection")); + + return pfnTryEnterCriticalSection + ? (*pfnTryEnterCriticalSection)((CRITICAL_SECTION *)m_buffer) != 0 + : false; +#else + return false; +#endif +} + void wxCriticalSection::Leave() { ::LeaveCriticalSection((CRITICAL_SECTION *)m_buffer); @@ -546,7 +567,7 @@ THREAD_RETVAL wxThreadInternal::DoThreadStart(wxThread *thread) // store the thread object in the TLS if ( !::TlsSetValue(gs_tlsThisThread, thread) ) { - wxLogSysError(_("Can not start thread: error writing TLS.")); + wxLogSysError(_("Cannot start thread: error writing TLS.")); return THREAD_ERROR_EXIT; } @@ -806,7 +827,7 @@ wxThreadInternal::WaitForTerminate(wxCriticalSection& cs, { case 0xFFFFFFFF: // error - wxLogSysError(_("Can not wait for thread termination")); + wxLogSysError(_("Cannot wait for thread termination")); Kill(); return wxTHREAD_KILLED; @@ -883,7 +904,7 @@ bool wxThreadInternal::Suspend() DWORD nSuspendCount = ::SuspendThread(m_hThread); if ( nSuspendCount == (DWORD)-1 ) { - wxLogSysError(_("Can not suspend thread %x"), m_hThread); + wxLogSysError(_("Cannot suspend thread %x"), m_hThread); return false; } @@ -898,7 +919,7 @@ bool wxThreadInternal::Resume() DWORD nSuspendCount = ::ResumeThread(m_hThread); if ( nSuspendCount == (DWORD)-1 ) { - wxLogSysError(_("Can not resume thread %x"), m_hThread); + wxLogSysError(_("Cannot resume thread %x"), m_hThread); return false; } @@ -1264,7 +1285,7 @@ bool wxThreadModule::OnInit() ::TlsFree(gs_tlsThisThread); gs_tlsThisThread = 0xFFFFFFFF; - wxLogSysError(_("Thread module initialization failed: can not store value in thread local storage")); + wxLogSysError(_("Thread module initialization failed: cannot store value in thread local storage")); return false; }