X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ca9e2173a63d0e5a56fa9c2f8e1ff6ff32a9b71f..0d6e0565c62a19264eb7d02dc2c2a1bad403d3f7:/include/wx/thread.h diff --git a/include/wx/thread.h b/include/wx/thread.h index 4eed53d1bf..a8346d20e0 100644 --- a/include/wx/thread.h +++ b/include/wx/thread.h @@ -207,24 +207,29 @@ private: #if !defined(__WXMSW__) #define wxCRITSECT_IS_MUTEX 1 -#ifdef __WXMAC__ - #define wxCRITSECT_INLINE -#else - #define wxCRITSECT_INLINE inline -#endif + #define wxCRITSECT_INLINE WXEXPORT inline #else // MSW #define wxCRITSECT_IS_MUTEX 0 #define wxCRITSECT_INLINE #endif // MSW/!MSW +enum wxCriticalSectionType +{ + // recursive critical section + wxCRITSEC_DEFAULT, + + // non-recursive critical section + wxCRITSEC_NON_RECURSIVE +}; + // you should consider wxCriticalSectionLocker whenever possible instead of // directly working with wxCriticalSection class - it is safer class WXDLLIMPEXP_BASE wxCriticalSection { public: // ctor & dtor - wxCRITSECT_INLINE wxCriticalSection(); + wxCRITSECT_INLINE wxCriticalSection( wxCriticalSectionType critSecType = wxCRITSEC_DEFAULT ); wxCRITSECT_INLINE ~wxCriticalSection(); // enter the section (the same as locking a mutex) wxCRITSECT_INLINE void Enter(); @@ -264,9 +269,10 @@ private: DECLARE_NO_COPY_CLASS(wxCriticalSection) }; -#if wxCRITSECT_IS_MUTEX && !defined(__WXMAC__) +#if wxCRITSECT_IS_MUTEX // implement wxCriticalSection using mutexes - inline wxCriticalSection::wxCriticalSection() { } + inline wxCriticalSection::wxCriticalSection( wxCriticalSectionType critSecType ) + : m_mutex( critSecType == wxCRITSEC_DEFAULT ? wxMUTEX_RECURSIVE : wxMUTEX_DEFAULT ) { } inline wxCriticalSection::~wxCriticalSection() { } inline void wxCriticalSection::Enter() { (void)m_mutex.Lock(); }