X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7c351dad14431c3e1aeeef6b86f61ba898d1d9ad..86b29a6122ae09d47995bc8f8919cb96a6ca18c7:/src/gtk/threadno.cpp diff --git a/src/gtk/threadno.cpp b/src/gtk/threadno.cpp index 06acae0260..2cdfcd3a37 100644 --- a/src/gtk/threadno.cpp +++ b/src/gtk/threadno.cpp @@ -13,39 +13,47 @@ #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() { } @@ -59,36 +67,36 @@ bool wxCondition::Wait(wxMutex& WXUNUSED(mutex), unsigned long WXUNUSED(sec), 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() { } @@ -97,34 +105,34 @@ void *wxThread::Join() 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; } @@ -135,22 +143,23 @@ void wxThread::OnExit() 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)