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