1///////////////////////////////////////////////////////////////////////////// 2// Name: src/gtk/threadno.cpp 3// Purpose: Solaris thread support 4// Author: Guilhem Lavaux 5// Modified by: 6// Created: 04/22/98 7// RCS-ID: $Id: threadno.cpp 40943 2006-08-31 19:31:43Z ABX $ 8// Copyright: (c) Wolfram Gloger (1996, 1997); Guilhem Lavaux (1998) 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12// For compilers that support precompilation, includes "wx.h". 13#include "wx/wxprec.h" 14 15#include "wx/thread.h" 16 17#ifndef WX_PRECOMP 18 #include "wx/log.h" 19 #include "wx/module.h" 20#endif 21 22#include "wx/wx.h" 23 24wxMutex::wxMutex() 25{ 26 m_locked = 0; 27} 28 29wxMutex::~wxMutex() 30{ 31 if (m_locked) 32 wxLogDebug( "wxMutex warning: destroying a locked mutex (%d locks)", m_locked ); 33} 34 35wxMutexError wxMutex::Lock() 36{ 37 m_locked++; 38 return wxMUTEX_NO_ERROR; 39} 40 41wxMutexError wxMutex::TryLock() 42{ 43 if (m_locked > 0) 44 return wxMUTEX_BUSY; 45 m_locked++; 46 return wxMUTEX_NO_ERROR; 47} 48 49wxMutexError wxMutex::Unlock() 50{ 51 if (m_locked == 0) 52 return wxMUTEX_UNLOCKED; 53 m_locked--; 54 return wxMUTEX_NO_ERROR; 55} 56 57wxCondition::wxCondition() 58{ 59} 60 61wxCondition::~wxCondition() 62{ 63} 64 65void wxCondition::Wait(wxMutex& WXUNUSED(mutex)) 66{ 67} 68 69bool wxCondition::Wait(wxMutex& WXUNUSED(mutex), unsigned long WXUNUSED(sec), 70 unsigned long WXUNUSED(nsec)) 71{ 72 return false; 73} 74 75void wxCondition::Signal() 76{ 77} 78 79void wxCondition::Broadcast() 80{ 81} 82 83struct wxThreadInternal 84{ 85 int thread_id; 86 void* exit_status; 87}; 88 89wxThreadError wxThread::Create() 90{ 91 p_internal->exit_status = Entry(); 92 OnExit(); 93 return wxTHREAD_NO_ERROR; 94} 95 96wxThreadError wxThread::Destroy() 97{ 98 return wxTHREAD_NOT_RUNNING; 99} 100 101wxThreadError wxThread::Pause() 102{ 103 return wxTHREAD_NOT_RUNNING; 104} 105 106wxThreadError wxThread::Resume() 107{ 108 return wxTHREAD_NOT_RUNNING; 109} 110 111void wxThread::DeferDestroy( bool WXUNUSED(on) ) 112{ 113} 114 115void wxThread::TestDestroy() 116{ 117} 118 119void *wxThread::Join() 120{ 121 return p_internal->exit_status; 122} 123 124unsigned long wxThread::GetID() const 125{ 126 return 0; 127} 128 129bool wxThread::IsMain() 130{ 131 return true; 132} 133 134bool wxThread::IsRunning() const 135{ 136 return false; 137} 138 139bool wxThread::IsAlive() const 140{ 141 return false; 142} 143 144void wxThread::SetPriority(int WXUNUSED(prio)) { } 145int wxThread::GetPriority() const { return 0; } 146 147wxMutex *wxMainMutex; // controls access to all GUI functions 148 149wxThread::wxThread() 150{ 151 p_internal = new wxThreadInternal(); 152} 153 154wxThread::~wxThread() 155{ 156 Destroy(); 157 Join(); 158 delete p_internal; 159} 160 161// The default callback just joins the thread and throws away the result. 162void wxThread::OnExit() 163{ 164 Join(); 165} 166 167IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule) 168 169bool wxThreadModule::OnInit() 170{ 171 wxMainMutex = new wxMutex(); 172 wxMainMutex->Lock(); 173 return true; 174} 175 176void wxThreadModule::OnExit() 177{ 178 wxMainMutex->Unlock(); 179 delete wxMainMutex; 180} 181 182 183 184void wxMutexGuiEnter() 185{ 186} 187 188void wxMutexGuiLeave() 189{ 190} 191