X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dac348b9e28c90e3ec6aa1bbd7f5085c90e9cdfd..6d41981d894198a4de266d399f0f5cd141f97df6:/src/msw/thread.cpp diff --git a/src/msw/thread.cpp b/src/msw/thread.cpp index e839cba462..df5f2f2ba7 100644 --- a/src/msw/thread.cpp +++ b/src/msw/thread.cpp @@ -32,6 +32,7 @@ #if wxUSE_THREADS #include "wx/msw/private.h" +#include "wx/msw/missing.h" #include "wx/module.h" #include "wx/thread.h" @@ -173,6 +174,8 @@ private: wxMutexError LockTimeout(DWORD milliseconds); HANDLE m_mutex; + + DECLARE_NO_COPY_CLASS(wxMutexInternal) }; // all mutexes are recursive under Win32 so we don't use mutexType @@ -242,7 +245,7 @@ wxMutexError wxMutexInternal::Unlock() { if ( !::ReleaseMutex(m_mutex) ) { - wxLogLastError(_("ReleaseMutex()")); + wxLogLastError(_T("ReleaseMutex()")); return wxMUTEX_MISC_ERROR; } @@ -264,13 +267,24 @@ public: bool IsOk() const { return m_semaphore != NULL; } wxSemaError Wait() { return WaitTimeout(INFINITE); } - wxSemaError TryWait() { return WaitTimeout(0); } + + wxSemaError TryWait() + { + wxSemaError rc = WaitTimeout(0); + if ( rc == wxSEMA_TIMEOUT ) + rc = wxSEMA_BUSY; + + return rc; + } + wxSemaError WaitTimeout(unsigned long milliseconds); wxSemaError Post(); private: HANDLE m_semaphore; + + DECLARE_NO_COPY_CLASS(wxSemaphoreInternal) }; wxSemaphoreInternal::wxSemaphoreInternal(int initialcount, int maxcount) @@ -316,7 +330,7 @@ wxSemaError wxSemaphoreInternal::WaitTimeout(unsigned long milliseconds) return wxSEMA_NO_ERROR; case WAIT_TIMEOUT: - return wxSEMA_BUSY; + return wxSEMA_TIMEOUT; default: wxLogLastError(_T("WaitForSingleObject(semaphore)")); @@ -535,6 +549,8 @@ private: wxThreadState m_state; // state, see wxThreadState enum unsigned int m_priority; // thread priority in "wx" units DWORD m_tid; // thread id + + DECLARE_NO_COPY_CLASS(wxThreadInternal) }; THREAD_RETVAL THREAD_CALLCONV wxThreadInternal::WinThreadStart(void *param) @@ -613,6 +629,9 @@ void wxThreadInternal::SetPriority(unsigned int priority) bool wxThreadInternal::Create(wxThread *thread, unsigned int stackSize) { + wxASSERT_MSG( m_state == STATE_NEW && !m_hThread, + _T("Create()ing thread twice?") ); + // for compilers which have it, we should use C RTL function for thread // creation instead of Win32 API one because otherwise we will have memory // leaks if the thread uses C RTL (and most threads do) @@ -985,7 +1004,7 @@ wxThreadError wxThread::Delete(ExitCode *pRc) // we can't just wait for the thread to terminate because it might be // calling some GUI functions and so it will never terminate before we // process the Windows messages that result from these functions - DWORD result; + DWORD result = 0; // suppress warnings from broken compilers do { if ( IsMain() )