#include "wx/thread.h"
#ifndef WX_PRECOMP
- #include "wx/msw/missing.h"
#include "wx/intl.h"
#include "wx/app.h"
#include "wx/module.h"
#include "wx/scopeguard.h"
#include "wx/msw/private.h"
+#include "wx/msw/missing.h"
#include "wx/msw/seh.h"
#include "wx/except.h"
bool IsOk() const { return m_mutex != NULL; }
wxMutexError Lock() { return LockTimeout(INFINITE); }
- wxMutexError TryLock() { return LockTimeout(0); }
+ wxMutexError Lock(unsigned long ms) { return LockTimeout(ms); }
+ wxMutexError TryLock();
wxMutexError Unlock();
private:
m_mutex = ::CreateMutex
(
NULL, // default secutiry attributes
- false, // not initially locked
+ FALSE, // not initially locked
NULL // no name
);
}
}
+wxMutexError wxMutexInternal::TryLock()
+{
+ const wxMutexError rc = LockTimeout(0);
+
+ // we have a special return code for timeout in this case
+ return rc == wxMUTEX_TIMEOUT ? wxMUTEX_BUSY : rc;
+}
+
wxMutexError wxMutexInternal::LockTimeout(DWORD milliseconds)
{
DWORD rc = ::WaitForSingleObject(m_mutex, milliseconds);
break;
case WAIT_TIMEOUT:
- return wxMUTEX_BUSY;
+ return wxMUTEX_TIMEOUT;
case WAIT_ABANDONED: // checked for above
default:
// set it: we can't link to SetProcessAffinityMask() because it doesn't
// exist in Win9x, use RT binding instead
- typedef BOOL (*SETPROCESSAFFINITYMASK)(HANDLE, DWORD);
+ typedef BOOL (WINAPI *SETPROCESSAFFINITYMASK)(HANDLE, DWORD_PTR);
// can use static var because we're always in the main thread here
static SETPROCESSAFFINITYMASK pfnSetProcessAffinityMask = NULL;