]> git.saurik.com Git - wxWidgets.git/blame - src/gtk/threadno.cpp
Prealpha, prebeta of new wxTreeCtrl for GTK. It is possible to AddRoot,
[wxWidgets.git] / src / gtk / threadno.cpp
CommitLineData
7c351dad
GL
1/////////////////////////////////////////////////////////////////////////////
2// Name: thread.cpp
3// Purpose: No thread support
4// Author: Original from Wolfram Gloger/Guilhem Lavaux
5// Modified by:
6// Created: 04/22/98
7// RCS-ID: $Id$
8// Copyright: (c) Wolfram Gloger (1996, 1997); Guilhem Lavaux (1998)
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11#ifdef __GNUG__
12#pragma implementation "thread.h"
13#endif
14
15#include "wx/wx.h"
c0392997 16#include "wx/module.h"
8d31c138 17#include "wx/thread.h"
7c351dad 18
ee4f8c2a 19wxMutex::wxMutex()
7c351dad 20{
b89156b5 21 m_locked = 0;
7c351dad
GL
22}
23
ee4f8c2a 24wxMutex::~wxMutex()
7c351dad 25{
b89156b5
GL
26 if (m_locked)
27 wxDebugMsg("wxMutex warning: destroying a locked mutex (%d locks)\n", m_locked);
7c351dad
GL
28}
29
c0392997 30wxMutexError wxMutex::Lock()
7c351dad 31{
b89156b5
GL
32 m_locked++;
33 return MUTEX_NO_ERROR;
7c351dad
GL
34}
35
c0392997 36wxMutexError wxMutex::TryLock()
7c351dad 37{
b89156b5
GL
38 if (m_locked > 0)
39 return MUTEX_BUSY;
40 m_locked++;
41 return MUTEX_NO_ERROR;
7c351dad
GL
42}
43
c0392997 44wxMutexError wxMutex::Unlock()
7c351dad 45{
b89156b5
GL
46 if (m_locked == 0)
47 return MUTEX_UNLOCKED;
48 m_locked--;
49 return MUTEX_NO_ERROR;
7c351dad
GL
50}
51
ee4f8c2a 52wxCondition::wxCondition()
7c351dad
GL
53{
54}
55
ee4f8c2a 56wxCondition::~wxCondition()
7c351dad
GL
57{
58}
59
60void wxCondition::Wait(wxMutex& WXUNUSED(mutex))
61{
62}
63
64bool wxCondition::Wait(wxMutex& WXUNUSED(mutex), unsigned long WXUNUSED(sec),
65 unsigned long WXUNUSED(nsec))
66{
67 return FALSE;
68}
69
ee4f8c2a 70void wxCondition::Signal()
7c351dad
GL
71{
72}
73
ee4f8c2a 74void wxCondition::Broadcast()
7c351dad
GL
75{
76}
77
c0392997 78struct wxThreadInternal {
7c351dad
GL
79 int thread_id;
80 void* exit_status;
81};
82
c0392997 83wxThreadError wxThread::Create()
7c351dad
GL
84{
85 p_internal->exit_status = Entry();
86 OnExit();
b89156b5 87 return THREAD_NO_ERROR;
7c351dad
GL
88}
89
c0392997 90wxThreadError wxThread::Destroy()
7c351dad 91{
c2dd8380
GL
92 return THREAD_NOT_RUNNING;
93}
94
95wxThreadError wxThread::Pause()
96{
97 return THREAD_NOT_RUNNING;
98}
99
100wxThreadError wxThread::Resume()
101{
102 return THREAD_NOT_RUNNING;
7c351dad
GL
103}
104
c0392997 105void wxThread::DeferDestroy( bool WXUNUSED(on) )
7c351dad
GL
106{
107}
108
ee4f8c2a 109void wxThread::TestDestroy()
7c351dad
GL
110{
111}
112
113void *wxThread::Join()
114{
115 return p_internal->exit_status;
116}
117
ee4f8c2a 118unsigned long wxThread::GetID() const
7c351dad
GL
119{
120 return 0;
121}
122
ee4f8c2a 123bool wxThread::IsMain()
7c351dad
GL
124{
125 return TRUE;
126}
127
c2dd8380
GL
128bool wxThread::IsRunning() const
129{
130 return FALSE;
131}
132
ee4f8c2a 133bool wxThread::IsAlive() const
7c351dad
GL
134{
135 return FALSE;
136}
137
138void wxThread::SetPriority(int WXUNUSED(prio)) { }
c0392997 139int wxThread::GetPriority() const { return 0; }
7c351dad
GL
140
141wxMutex wxMainMutex; // controls access to all GUI functions
142
143wxThread::wxThread()
144{
c0392997 145 p_internal = new wxThreadInternal();
7c351dad
GL
146}
147
148wxThread::~wxThread()
149{
c0392997 150 Destroy();
7c351dad
GL
151 Join();
152 delete p_internal;
153}
154
155// The default callback just joins the thread and throws away the result.
156void wxThread::OnExit()
157{
158 Join();
159}
160
b89156b5
GL
161
162// Automatic initialization
163class wxThreadModule : public wxModule {
164 DECLARE_DYNAMIC_CLASS(wxThreadModule)
165public:
166 bool OnInit();
167 void OnExit();
168};
169
170bool wxThreadModule::OnInit() {
7c351dad 171 wxMainMutex.Lock();
b89156b5 172 return TRUE;
7c351dad
GL
173}
174
c0392997 175void wxThreadModule::OnExit()
7c351dad
GL
176{
177 wxMainMutex.Unlock();
178}
179
b89156b5 180IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)