X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ee4f8c2af9c6c5458e488db10aef7d00a89ace25..aae24d21a33faa2a23fccde24255365ca845c46f:/src/gtk/threadno.cpp?ds=inline diff --git a/src/gtk/threadno.cpp b/src/gtk/threadno.cpp index 9b1686c349..7299440456 100644 --- a/src/gtk/threadno.cpp +++ b/src/gtk/threadno.cpp @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// // Name: thread.cpp -// Purpose: No thread support -// Author: Original from Wolfram Gloger/Guilhem Lavaux +// Purpose: Solaris thread support +// Author: Guilhem Lavaux // Modified by: // Created: 04/22/98 // RCS-ID: $Id$ @@ -13,32 +13,41 @@ #endif #include "wx/wx.h" +#include "wx/module.h" +#include "wx/thread.h" +#include "wx/log.h" wxMutex::wxMutex() { - m_locked = FALSE; + m_locked = 0; } wxMutex::~wxMutex() { + if (m_locked) + wxLogDebug( "wxMutex warning: destroying a locked mutex (%d locks)\n", m_locked ); } -MutexError wxMutex::Lock() +wxMutexError wxMutex::Lock() { - m_locked = TRUE; - return NO_ERROR; + m_locked++; + return wxMUTEX_NO_ERROR; } -MutexError wxMutex::TryLock() +wxMutexError wxMutex::TryLock() { - m_locked = TRUE; - return NO_ERROR; + if (m_locked > 0) + return wxMUTEX_BUSY; + m_locked++; + return wxMUTEX_NO_ERROR; } -MutexError wxMutex::Unlock() +wxMutexError wxMutex::Unlock() { - m_locked = FALSE; - return NO_ERROR; + if (m_locked == 0) + return wxMUTEX_UNLOCKED; + m_locked--; + return wxMUTEX_NO_ERROR; } wxCondition::wxCondition() @@ -67,24 +76,34 @@ void wxCondition::Broadcast() { } -struct wxThreadPrivate { +struct wxThreadInternal { int thread_id; void* exit_status; }; -ThreadError wxThread::Create() +wxThreadError wxThread::Create() { p_internal->exit_status = Entry(); OnExit(); - return NO_ERROR; + return wxTHREAD_NO_ERROR; } -ThreadError wxThread::Destroy() +wxThreadError wxThread::Destroy() { - return RUNNING; + return wxTHREAD_NOT_RUNNING; } -void wxThread::DeferDestroy() +wxThreadError wxThread::Pause() +{ + return wxTHREAD_NOT_RUNNING; +} + +wxThreadError wxThread::Resume() +{ + return wxTHREAD_NOT_RUNNING; +} + +void wxThread::DeferDestroy( bool WXUNUSED(on) ) { } @@ -107,24 +126,29 @@ bool wxThread::IsMain() return TRUE; } +bool wxThread::IsRunning() const +{ + return FALSE; +} + bool wxThread::IsAlive() const { return FALSE; } void wxThread::SetPriority(int WXUNUSED(prio)) { } -int wxThread::GetPriority() const { } +int wxThread::GetPriority() const { return 0; } -wxMutex wxMainMutex; // controls access to all GUI functions +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 +159,28 @@ void wxThread::OnExit() Join(); } -// Global initialization -static void wxThreadInit(void *WXUNUSED(client)) + +IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule) + +bool wxThreadModule::OnInit() +{ + wxMainMutex = new wxMutex(); + wxMainMutex->Lock(); + return TRUE; +} + +void wxThreadModule::OnExit() { - wxMainMutex.Lock(); + wxMainMutex->Unlock(); + delete wxMainMutex; } -// Global cleanup -static void wxThreadExit(void *WXUNUSED(client)) + + +void wxMutexGuiEnter() { - wxMainMutex.Unlock(); } -// Let automatic initialization be performed from wxCommonInit(). -static struct -wxThreadGlobal { - wxThreadGlobal() { - wxRegisterModuleFunction(wxThreadInit, wxThreadExit, NULL); - } -} dummy; +void wxMutexGuiLeave() +{ +}