X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0dd300cab599596e15ea46bf494f171edd6f0b08..6ba718d7aee2f519d9146b90424ccec9e2243479:/src/unix/threadpsx.cpp diff --git a/src/unix/threadpsx.cpp b/src/unix/threadpsx.cpp index b0a2e54f9f..38897f3b28 100644 --- a/src/unix/threadpsx.cpp +++ b/src/unix/threadpsx.cpp @@ -4,7 +4,6 @@ // Author: Original from Wolfram Gloger/Guilhem Lavaux // Modified by: K. S. Sreeram (2002): POSIXified wxCondition, added wxSemaphore // Created: 04/22/98 -// RCS-ID: $Id$ // Copyright: (c) Wolfram Gloger (1996, 1997) // Guilhem Lavaux (1998) // Vadim Zeitlin (1999-2002) @@ -749,6 +748,8 @@ public: // id pthread_t GetId() const { return m_threadId; } pthread_t *GetIdPtr() { return &m_threadId; } + // "created" flag + bool WasCreated() const { return m_created; } // "cancelled" flag void SetCancelFlag() { m_cancelled = true; } bool WasCancelled() const { return m_cancelled; } @@ -779,6 +780,9 @@ private: wxThreadState m_state; // see wxThreadState enum int m_prio; // in wxWidgets units: from 0 to 100 + // this flag is set when the thread was successfully created + bool m_created; + // this flag is set when the thread should terminate bool m_cancelled; @@ -958,6 +962,7 @@ void wxThreadInternal::Cleanup(wxThread *thread) wxThreadInternal::wxThreadInternal() { m_state = STATE_NEW; + m_created = false; m_cancelled = false; m_prio = wxPRIORITY_DEFAULT; m_threadId = 0; @@ -1097,6 +1102,7 @@ wxThreadError wxThreadInternal::Create(wxThread *thread, return wxTHREAD_NO_RESOURCE; } + m_created = true; return wxTHREAD_NO_ERROR; } @@ -1321,8 +1327,14 @@ wxThreadError wxThread::Run() { wxCriticalSectionLocker lock(m_critsect); - wxCHECK_MSG( m_internal->GetId(), wxTHREAD_MISC_ERROR, - wxT("must call wxThread::Create() first") ); + // Create the thread if it wasn't created yet with an explicit + // Create() call: + if ( !m_internal->WasCreated() ) + { + wxThreadError rv = m_internal->Create(this, 0); + if ( rv != wxTHREAD_NO_ERROR ) + return rv; + } return m_internal->Run(); }