#endif
#include "wx/wx.h"
+#include "wx/module.h"
+#include "wx/thread.h"
-wxMutex::wxMutex(void)
+wxMutex::wxMutex()
{
- m_locked = FALSE;
+ m_locked = 0;
}
-wxMutex::~wxMutex(void)
+wxMutex::~wxMutex()
{
+ if (m_locked)
+ wxDebugMsg("wxMutex warning: destroying a locked mutex (%d locks)\n", m_locked);
}
-MutexError wxMutex::Lock(void)
+wxMutexError wxMutex::Lock()
{
- m_locked = TRUE;
- return NO_ERROR;
+ m_locked++;
+ return MUTEX_NO_ERROR;
}
-MutexError wxMutex::TryLock(void)
+wxMutexError wxMutex::TryLock()
{
- m_locked = TRUE;
- return NO_ERROR;
+ if (m_locked > 0)
+ return MUTEX_BUSY;
+ m_locked++;
+ return MUTEX_NO_ERROR;
}
-MutexError wxMutex::Unlock(void)
+wxMutexError wxMutex::Unlock()
{
- m_locked = FALSE;
- return NO_ERROR;
+ if (m_locked == 0)
+ return MUTEX_UNLOCKED;
+ m_locked--;
+ return MUTEX_NO_ERROR;
}
-wxCondition::wxCondition(void)
+wxCondition::wxCondition()
{
}
-wxCondition::~wxCondition(void)
+wxCondition::~wxCondition()
{
}
return FALSE;
}
-void wxCondition::Signal(void)
+void wxCondition::Signal()
{
}
-void wxCondition::Broadcast(void)
+void wxCondition::Broadcast()
{
}
-struct wxThreadPrivate {
+struct wxThreadInternal {
int thread_id;
void* exit_status;
};
-ThreadError wxThread::Create(void)
+wxThreadError wxThread::Create()
{
p_internal->exit_status = Entry();
OnExit();
- return NO_ERROR;
+ return THREAD_NO_ERROR;
}
-ThreadError wxThread::Destroy(void)
+wxThreadError wxThread::Destroy()
{
- return RUNNING;
+ return THREAD_RUNNING;
}
-void wxThread::DifferDestroy(void)
+void wxThread::DeferDestroy( bool WXUNUSED(on) )
{
}
-void wxThread::TestDestroy(void)
+void wxThread::TestDestroy()
{
}
return p_internal->exit_status;
}
-unsigned long wxThread::GetID()
+unsigned long wxThread::GetID() const
{
return 0;
}
-bool wxThread::IsMain(void)
+bool wxThread::IsMain()
{
return TRUE;
}
-bool wxThread::IsAlive(void)
+bool wxThread::IsAlive() const
{
return FALSE;
}
void wxThread::SetPriority(int WXUNUSED(prio)) { }
-int wxThread::GetPriority(void) { }
+int wxThread::GetPriority() const { return 0; }
wxMutex wxMainMutex; // controls access to all GUI functions
wxThread::wxThread()
{
- p_internal = new wxThreadPrivate();
+ p_internal = new wxThreadInternal();
}
wxThread::~wxThread()
{
- Cancel();
+ Destroy();
Join();
delete p_internal;
}
Join();
}
-// Global initialization
-static void wxThreadInit(void *WXUNUSED(client))
-{
+
+// Automatic initialization
+class wxThreadModule : public wxModule {
+ DECLARE_DYNAMIC_CLASS(wxThreadModule)
+public:
+ bool OnInit();
+ void OnExit();
+};
+
+bool wxThreadModule::OnInit() {
wxMainMutex.Lock();
+ return TRUE;
}
-// Global cleanup
-static void wxThreadExit(void *WXUNUSED(client))
+void wxThreadModule::OnExit()
{
wxMainMutex.Unlock();
}
-// Let automatic initialization be performed from wxCommonInit().
-static struct
-wxThreadGlobal {
- wxThreadGlobal() {
- wxRegisterModuleFunction(wxThreadInit, wxThreadExit, NULL);
- }
-} dummy;
+IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)