#if wxCRITSECT_IS_MUTEX
// implement wxCriticalSection using mutexes
- inline wxCriticalSection::wxCriticalSection( wxCriticalSectionType critSecType )
+ inline wxCriticalSection::wxCriticalSection( wxCriticalSectionType critSecType )
: m_mutex( critSecType == wxCRITSEC_DEFAULT ? wxMUTEX_RECURSIVE : wxMUTEX_DEFAULT ) { }
inline wxCriticalSection::~wxCriticalSection() { }
wxThreadKind GetKind() const
{ return m_isDetached ? wxTHREAD_DETACHED : wxTHREAD_JOINABLE; }
- // called when the thread exits - in the context of this thread
- //
- // NB: this function will not be called if the thread is Kill()ed
- virtual void OnExit() { }
-
// Returns true if the thread was asked to terminate: this function should
// be called by the thread from time to time, otherwise the main thread
// will be left forever in Delete()!
wxThread(const wxThread&);
wxThread& operator=(const wxThread&);
+ // called when the thread exits - in the context of this thread
+ //
+ // NB: this function will not be called if the thread is Kill()ed
+ virtual void OnExit() { }
+
friend class wxThreadInternal;
// the (platform-dependent) thread class implementation
// sets it to NULL, then the thread object still
// exists and can be killed
wxCriticalSectionLocker locker(m_critSection);
-
+
if ( m_thread )
{
m_thread->Kill();
-
+
if ( m_kind == wxTHREAD_JOINABLE )
delete m_thread;
-
+
m_thread = NULL;
}
}
wxThread *GetThread() const
{
wxCriticalSectionLocker locker((wxCriticalSection&)m_critSection);
-
+
wxThread* thread = m_thread;
-
+
return thread;
}
wxThread *m_thread;
wxThreadKind m_kind;
wxCriticalSection m_critSection; // To guard the m_thread variable
-
+
friend class wxThreadHelperThread;
};
inline void *wxThreadHelperThread::Entry()
{
void * const result = m_owner.Entry();
-
+
wxCriticalSectionLocker locker(m_owner.m_critSection);
-
+
// Detached thread will be deleted after returning, so make sure
// wxThreadHelper::GetThread will not return an invalid pointer.
// And that wxThreadHelper::KillThread will not try to kill
// an already deleted thread
if ( m_owner.m_kind == wxTHREAD_DETACHED )
m_owner.m_thread = NULL;
-
+
return result;
}
*/
wxThreadError Kill();
- /**
- Called when the thread exits.
-
- This function is called in the context of the thread associated with the
- wxThread object, not in the context of the main thread.
- This function will not be called if the thread was @ref Kill() killed.
-
- This function should never be called directly.
- */
- virtual void OnExit();
-
/**
Suspends the thread.
OnExit() will be called just before exiting.
*/
void Exit(ExitCode exitcode = 0);
+
+private:
+
+ /**
+ Called when the thread exits.
+
+ This function is called in the context of the thread associated with the
+ wxThread object, not in the context of the main thread.
+ This function will not be called if the thread was @ref Kill() killed.
+
+ This function should never be called directly.
+ */
+ virtual void OnExit();
};