]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/mpthread.cpp
default button on older systems was not shown with OK, but empty, resulting in wxID_C...
[wxWidgets.git] / src / mac / carbon / mpthread.cpp
index 52976e92a53341f96497f20f8a1f53e8d8d6355a..9da62d0185180694d2c2ae231c4af9a688aa88a6 100755 (executable)
 // Licence:    wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "thread.h"
-#endif
-
 // ----------------------------------------------------------------------------
 // headers
 // ----------------------------------------------------------------------------
 #include "wx/thread.h"
 
 #ifdef __WXMAC__
+#if TARGET_API_MAC_OSX
 #include <CoreServices/CoreServices.h>
+#else
+#include <DriverServices.h>
+#include <Multiprocessing.h>
+#include "wx/math.h"
+#endif
 #include "wx/mac/uma.h"
 #endif
 
-// trace mask for wxThread operations
-#define TRACE_THREADS   _T("thread")
-
-// you can get additional debugging messages for the semaphore operations
-#define TRACE_SEMA      _T("semaphore")
-
-
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
@@ -127,6 +122,20 @@ MPCriticalRegionID gs_guiCritical = kInvalidID;
 // wxMutex implementation
 // ----------------------------------------------------------------------------
 
+static bool wxMacMPThreadsInitVerify()
+{
+       static bool hasThreadManager = false ;
+       if ( !hasThreadManager )
+           hasThreadManager = MPLibraryIsLoaded();
+    
+       if ( !hasThreadManager )
+    {
+               wxMessageBox( wxT("Error") , wxT("MP Thread Support is not available on this System" ), wxOK ) ;
+               return FALSE ;
+    }
+    return TRUE ;
+}      
+
 #if 0 
 
 class wxMutexInternal
@@ -146,6 +155,8 @@ private:
 
 wxMutexInternal::wxMutexInternal(wxMutexType mutexType )
 {
+    wxMacMPThreadsInitVerify() ;
+    
     m_isOk = false ;
     m_semaphore = kInvalidID ;
     
@@ -235,6 +246,7 @@ private:
 
 wxMutexInternal::wxMutexInternal(wxMutexType mutexType )
 {
+    wxMacMPThreadsInitVerify() ;
     m_isOk = false ;
     m_critRegion = kInvalidID ;
     
@@ -328,6 +340,7 @@ private:
 
 wxSemaphoreInternal::wxSemaphoreInternal(int initialcount, int maxcount)
 {
+    wxMacMPThreadsInitVerify() ;
     m_isOk = false ;
     m_semaphore = kInvalidID ;
        if ( maxcount == 0 )
@@ -779,7 +792,7 @@ private:
        MPQueueID           m_notifyQueueId;    // its notification queue
 
     wxThreadState m_state;              // see wxThreadState enum
-    int           m_prio;               // in wxWindows units: from 0 to 100
+    int           m_prio;               // in wxWidgets units: from 0 to 100
 
     // this flag is set when the thread should terminate
     bool m_cancelled;
@@ -861,6 +874,7 @@ OSStatus wxThreadInternal::MacThreadStart(void *parameter)
 
 bool wxThreadInternal::Create(wxThread *thread, unsigned int stackSize)
 {
+    wxMacMPThreadsInitVerify() ;
     wxASSERT_MSG( m_state == STATE_NEW && !m_tid,
                     _T("Create()ing thread twice?") );
 
@@ -909,8 +923,8 @@ void wxThreadInternal::SetPriority( int priority)
        if ( m_tid)
     {
                // Mac priorities range from 1 to 10,000, with a default of 100.
-               // wxWindows priorities range from 0 to 100 with a default of 50.
-               // We can map wxWindows to Mac priorities easily by assuming
+               // wxWidgets priorities range from 0 to 100 with a default of 50.
+               // We can map wxWidgets to Mac priorities easily by assuming
                // the former uses a logarithmic scale.
                const unsigned int macPriority = ( int)( exp( priority / 25.0 * log( 10.0)) + 0.5);
                
@@ -956,7 +970,7 @@ void wxThreadInternal::Wait()
                                 kDurationForever);
             if ( err)
             {
-                wxLogSysError( _( "Cannot wait on thread to exit."));
+                wxLogSysError( _( "Cannot wait for thread termination."));
                 rc = (void*) -1;
             }
 
@@ -1149,16 +1163,9 @@ wxThreadError wxThread::Resume()
     switch ( state )
     {
         case STATE_PAUSED:
-            wxLogTrace(TRACE_THREADS, _T("Thread %ld suspended, resuming."),
-                       GetId());
-
             m_internal->Resume();
-
             return wxTHREAD_NO_ERROR;
-
         case STATE_EXITED:
-            wxLogTrace(TRACE_THREADS, _T("Thread %ld exited, won't resume."),
-                       GetId());
             return wxTHREAD_NO_ERROR;
 
         default:
@@ -1422,13 +1429,9 @@ private:
 IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
 
 bool wxThreadModule::OnInit()
-{
-       bool hasThreadManager = false ;
-       hasThreadManager = MPLibraryIsLoaded();
-    
-       if ( !hasThreadManager )
+{    
+       if ( !wxMacMPThreadsInitVerify() )
     {
-               wxMessageBox( "Error" , "MP Thread Support is not available on this System" , wxOK ) ;
                return FALSE ;
     }