class WXDLLEXPORT wxCriticalSectionLocker
{
public:
- wxCriticalSectionLocker(wxCriticalSection *critsect)
- { (m_critsect = critsect)->Enter(); }
+ wxCriticalSectionLocker(wxCriticalSection& critsect) : m_critsect(critsect)
+ { m_critsect.Enter(); }
~wxCriticalSectionLocker()
- { m_critsect->Leave(); }
+ { m_critsect.Leave(); }
private:
- wxCriticalSection *m_critsect;
+ wxCriticalSection& m_critsect;
};
#endif
void WXDLLEXPORT wxMutexGuiEnter();
void WXDLLEXPORT wxMutexGuiLeave();
+// implementation only
+#ifdef __WXMSW__
+ // unlock GUI if there are threads waiting for and lock it back when
+ // there are no more of them - should be called periodically by the main
+ // thread
+ void WXDLLEXPORT wxMutexGuiLeaveOrEnter();
+
+ // returns TRUE if the main thread has GUI lock
+ inline bool WXDLLEXPORT wxGuiOwnedByMainThread();
+
+ // wakes up the main thread if it's sleeping inside ::GetMessage()
+ inline void WXDLLEXPORT wxWakeUpMainThread();
+#endif // MSW
+
#else // !wxUSE_THREADS
// no thread support
#endif // wxUSE_THREADS
+// automatically unlock GUI mutex in dtor
+class WXDLLEXPORT wxMutexGuiLocker
+{
+public:
+ wxMutexGuiLocker() { wxMutexGuiEnter(); }
+ ~wxMutexGuiLocker() { wxMutexGuiLeave(); }
+};
+
#endif // __THREADH__