]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/thread.cpp
A little clarification
[wxWidgets.git] / src / mac / thread.cpp
index 23a72037529fc718ccf96605f5a9d16ecc321457..3634a69ddec7e9aa49ce2efc0d8992e072602df7 100644 (file)
 #ifdef __WXMAC__
 #include <Threads.h>
 #include "wx/mac/uma.h"
 #ifdef __WXMAC__
 #include <Threads.h>
 #include "wx/mac/uma.h"
+#include "wx/mac/macnotfy.h"
 #endif
 
 #define INFINITE 0xFFFFFFFF
 
 #endif
 
 #define INFINITE 0xFFFFFFFF
 
+
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
@@ -62,6 +64,7 @@ enum wxThreadState
 
 static ThreadID gs_idMainThread = kNoThreadID ;
 static bool gs_waitingForThread = FALSE ;
 
 static ThreadID gs_idMainThread = kNoThreadID ;
 static bool gs_waitingForThread = FALSE ;
+size_t g_numberOfThreads = 0;
 
 // ============================================================================
 // MacOS implementation of thread classes
 
 // ============================================================================
 // MacOS implementation of thread classes
@@ -257,12 +260,12 @@ public:
     }
 
     bool IsOk() const { return m_mutex.IsOk() ; }
     }
 
     bool IsOk() const { return m_mutex.IsOk() ; }
-    
+
     wxCondError Wait()
     {
         return WaitTimeout(0xFFFFFFFF );
     }
     wxCondError Wait()
     {
         return WaitTimeout(0xFFFFFFFF );
     }
-    
+
     wxCondError WaitTimeout(unsigned long msectimeout)
     {
         wxMacStCritical critical ;
     wxCondError WaitTimeout(unsigned long msectimeout)
     {
         wxMacStCritical critical ;
@@ -300,7 +303,7 @@ public:
     {
         wxMacStCritical critical ;
         return wxCOND_NO_ERROR;
     {
         wxMacStCritical critical ;
         return wxCOND_NO_ERROR;
-    }    
+    }
 
     wxArrayLong m_waiters ;
     wxInt32     m_excessSignals ;
 
     wxArrayLong m_waiters ;
     wxInt32     m_excessSignals ;
@@ -433,6 +436,8 @@ bool wxThreadInternal::Create(wxThread *thread, unsigned int stackSize)
         SetPriority(m_priority);
     }
 
         SetPriority(m_priority);
     }
 
+    m_state = STATE_NEW;
+
     return TRUE;
 }
 
     return TRUE;
 }
 
@@ -527,7 +532,7 @@ void wxThread::Sleep(unsigned long milliseconds)
     do
     {
         YieldToAnyThread();
     do
     {
         YieldToAnyThread();
-    } while( clock() - start < (milliseconds * CLOCKS_PER_SEC) / 1000 ) ;
+    } while( clock() - start < milliseconds * CLOCKS_PER_SEC /  1000.0 ) ;
 }
 
 int wxThread::GetCPUCount()
 }
 
 int wxThread::GetCPUCount()
@@ -567,6 +572,7 @@ bool wxThread::SetConcurrency(size_t level)
 
 wxThread::wxThread(wxThreadKind kind)
 {
 
 wxThread::wxThread(wxThreadKind kind)
 {
+    g_numberOfThreads++;
     m_internal = new wxThreadInternal();
 
     m_isDetached = kind == wxTHREAD_DETACHED;
     m_internal = new wxThreadInternal();
 
     m_isDetached = kind == wxTHREAD_DETACHED;
@@ -575,6 +581,17 @@ wxThread::wxThread(wxThreadKind kind)
 
 wxThread::~wxThread()
 {
 
 wxThread::~wxThread()
 {
+    if (g_numberOfThreads>0)
+    {
+        g_numberOfThreads--;
+    }
+#ifdef __WXDEBUG__
+    else
+    {
+        wxFAIL_MSG(wxT("More threads deleted than created."));
+    }
+#endif
+
     s_threads.Remove( (void*) this ) ;
     if (m_internal != NULL) {
         delete m_internal;
     s_threads.Remove( (void*) this ) ;
     if (m_internal != NULL) {
         delete m_internal;
@@ -714,13 +731,6 @@ wxThreadError wxThread::Delete(ExitCode *pRc)
         }
     }
 
         }
     }
 
- //   if ( !::GetExitCodeThread(hThread, (LPDWORD)&rc) )
-    {
-        wxLogLastError("GetExitCodeThread");
-
-        rc = (ExitCode)-1;
-    }
-
     if ( IsDetached() )
     {
         // if the thread exits normally, this is done in WinThreadStart, but in
     if ( IsDetached() )
     {
         // if the thread exits normally, this is done in WinThreadStart, but in
@@ -730,9 +740,6 @@ wxThreadError wxThread::Delete(ExitCode *pRc)
         delete this;
     }
 
         delete this;
     }
 
- //   wxASSERT_MSG( (DWORD)rc != STILL_ACTIVE,
- //                 wxT("thread must be already terminated.") );
-
     if ( pRc )
         *pRc = rc;
 
     if ( pRc )
         *pRc = rc;
 
@@ -852,7 +859,7 @@ bool wxThreadModule::OnInit()
 #endif
     if ( !hasThreadManager )
     {
 #endif
     if ( !hasThreadManager )
     {
-        wxMessageBox( "Error" , "Thread Support is not available on this System" , wxOK ) ;
+        wxLogSysError( wxT("Thread Support is not available on this System") );
         return FALSE ;
     }
 
         return FALSE ;
     }