]> git.saurik.com Git - wxWidgets.git/blob - src/qt/threadno.cpp
fixed (rare but fatal) bug in wxWindowDisabler
[wxWidgets.git] / src / qt / threadno.cpp
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"
16 #include "wx/module.h"
17 #include "wx/thread.h"
18
19 wxMutex::wxMutex()
20 {
21 m_locked = 0;
22 }
23
24 wxMutex::~wxMutex()
25 {
26 if (m_locked)
27 wxDebugMsg("wxMutex warning: destroying a locked mutex (%d locks)\n", m_locked);
28 }
29
30 wxMutexError wxMutex::Lock()
31 {
32 m_locked++;
33 return MUTEX_NO_ERROR;
34 }
35
36 wxMutexError wxMutex::TryLock()
37 {
38 if (m_locked > 0)
39 return MUTEX_BUSY;
40 m_locked++;
41 return MUTEX_NO_ERROR;
42 }
43
44 wxMutexError wxMutex::Unlock()
45 {
46 if (m_locked == 0)
47 return MUTEX_UNLOCKED;
48 m_locked--;
49 return MUTEX_NO_ERROR;
50 }
51
52 wxCondition::wxCondition()
53 {
54 }
55
56 wxCondition::~wxCondition()
57 {
58 }
59
60 void wxCondition::Wait(wxMutex& WXUNUSED(mutex))
61 {
62 }
63
64 bool wxCondition::Wait(wxMutex& WXUNUSED(mutex), unsigned long WXUNUSED(sec),
65 unsigned long WXUNUSED(nsec))
66 {
67 return FALSE;
68 }
69
70 void wxCondition::Signal()
71 {
72 }
73
74 void wxCondition::Broadcast()
75 {
76 }
77
78 struct wxThreadInternal {
79 int thread_id;
80 void* exit_status;
81 };
82
83 wxThreadError wxThread::Create()
84 {
85 p_internal->exit_status = Entry();
86 OnExit();
87 return THREAD_NO_ERROR;
88 }
89
90 wxThreadError wxThread::Destroy()
91 {
92 return THREAD_NOT_RUNNING;
93 }
94
95 wxThreadError wxThread::Pause()
96 {
97 return THREAD_NOT_RUNNING;
98 }
99
100 wxThreadError wxThread::Resume()
101 {
102 return THREAD_NOT_RUNNING;
103 }
104
105 void wxThread::DeferDestroy( bool WXUNUSED(on) )
106 {
107 }
108
109 void wxThread::TestDestroy()
110 {
111 }
112
113 void *wxThread::Join()
114 {
115 return p_internal->exit_status;
116 }
117
118 unsigned long wxThread::GetID() const
119 {
120 return 0;
121 }
122
123 wxThread *wxThread::GetThreadFromID(unsigned long WXUNUSED(id)) const
124 {
125 return NULL;
126 }
127
128 bool wxThread::IsMain()
129 {
130 return TRUE;
131 }
132
133 bool wxThread::IsRunning() const
134 {
135 return FALSE;
136 }
137
138 bool wxThread::IsAlive() const
139 {
140 return FALSE;
141 }
142
143 void wxThread::SetPriority(int WXUNUSED(prio)) { }
144 int wxThread::GetPriority() const { return 0; }
145
146 wxMutex *wxMainMutex; // controls access to all GUI functions
147
148 wxThread::wxThread()
149 {
150 p_internal = new wxThreadInternal();
151 }
152
153 wxThread::~wxThread()
154 {
155 Destroy();
156 Join();
157 delete p_internal;
158 }
159
160 // The default callback just joins the thread and throws away the result.
161 void wxThread::OnExit()
162 {
163 Join();
164 }
165
166
167 // Automatic initialization
168 class wxThreadModule : public wxModule {
169 DECLARE_DYNAMIC_CLASS(wxThreadModule)
170 public:
171 bool OnInit();
172 void OnExit();
173 };
174
175 bool wxThreadModule::OnInit() {
176 wxMainMutex = new wxMutex();
177 wxMainMutex->Lock();
178 return TRUE;
179 }
180
181 void wxThreadModule::OnExit()
182 {
183 wxMainMutex->Unlock();
184 delete wxMainMutex;
185 }
186
187 IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)