wxStopWatch precision.
- Made wxGetLocalTimeMillis() really return local time, added
wxGetUTCTimeMillis() returning what this function used to return.
+- Added wxCriticalSection::TryEnter() (Catalin Raceanu).
All (GUI):
// enter the section (the same as locking a mutex)
wxCRITSECT_INLINE void Enter();
+ // try to enter the section (the same as trying to lock a mutex)
+ wxCRITSECT_INLINE bool TryEnter();
+
// leave the critical section (same as unlocking a mutex)
wxCRITSECT_INLINE void Leave();
inline wxCriticalSection::~wxCriticalSection() { }
inline void wxCriticalSection::Enter() { (void)m_mutex.Lock(); }
+ inline bool wxCriticalSection::TryEnter() { return m_mutex.TryLock() == wxMUTEX_NO_ERROR; }
inline void wxCriticalSection::Leave() { (void)m_mutex.Unlock(); }
#endif // wxCRITSECT_IS_MUTEX
*/
void Enter();
+ /**
+ Try to enter the critical section (same as trying to lock a mutex).
+ If it can't, immediately returns false.
+
+ @since 2.9.3
+ */
+ bool TryEnter();
+
/**
Leave the critical section allowing other threads use the global data
protected by it. There is no error return for this function.
#include "wx/except.h"
+#include "wx/dynlib.h"
+
// must have this symbol defined to get _beginthread/_endthread declarations
#ifndef _MT
#define _MT
::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);
MPEnterCriticalRegion( (MPCriticalRegionID) m_critRegion, kDurationForever );
}
+bool wxCriticalSection::TryEnter()
+{
+ return MPEnterCriticalRegion( (MPCriticalRegionID) m_critRegion, kDurationImmediate ) == noErr;
+}
+
void wxCriticalSection::Leave()
{
MPExitCriticalRegion( (MPCriticalRegionID) m_critRegion );
{
}
+bool wxCriticalSection::TryEnter()
+{
+ return false;
+}
+
void wxCriticalSection::Leave()
{
}