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