]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied patch #809919 (Allows wxMac threads to run at fullspeed).
authorDimitri Schoolwerth <dimitri.schoolwerth@gmail.com>
Mon, 24 Nov 2003 20:53:35 +0000 (20:53 +0000)
committerDimitri Schoolwerth <dimitri.schoolwerth@gmail.com>
Mon, 24 Nov 2003 20:53:35 +0000 (20:53 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24660 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/app.cpp
src/mac/carbon/app.cpp
src/mac/carbon/thread.cpp
src/mac/thread.cpp

index 2ff6ed261db929a64e3a4aa4adb7c55b1219e763..788986f20ed0548f2302380b370fc2bdc527a28c 100644 (file)
@@ -69,6 +69,7 @@
 extern wxList wxPendingDelete;
 extern wxList *wxWinMacWindowList;
 extern wxList *wxWinMacControlList;
+extern size_t g_numberOfThreads;
 
 // statics for implementation
 
@@ -1250,7 +1251,16 @@ void wxApp::MacDoOneEvent()
         if ( wxTheApp->ProcessIdle() )
             sleepTime = kEventDurationNoWait ;
         else
-            sleepTime = kEventDurationForever ;
+        {
+            if (g_numberOfThreads)
+            {
+                sleepTime = kEventDurationNoWait;
+            }
+            else
+            {
+                sleepTime = kEventDurationSecond;
+            }
+        }
     }
     else if ( status == eventLoopQuitErr )
     {
@@ -1284,7 +1294,16 @@ void wxApp::MacDoOneEvent()
         if ( wxTheApp->ProcessIdle() )
             sleepTime = kEventDurationNoWait;
         else
-            sleepTime = GetCaretTime() / 2 ;
+        {
+            if (g_numberOfThreads)
+            {
+                sleepTime = kEventDurationNoWait;
+            }
+            else
+            {
+                sleepTime = kEventDurationSecond;
+            }
+        }
     }
     if ( event.what != kHighLevelEvent )
         SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v ,  event.where.h + 1 , event.where.v + 1 ) ;
index 2ff6ed261db929a64e3a4aa4adb7c55b1219e763..788986f20ed0548f2302380b370fc2bdc527a28c 100644 (file)
@@ -69,6 +69,7 @@
 extern wxList wxPendingDelete;
 extern wxList *wxWinMacWindowList;
 extern wxList *wxWinMacControlList;
+extern size_t g_numberOfThreads;
 
 // statics for implementation
 
@@ -1250,7 +1251,16 @@ void wxApp::MacDoOneEvent()
         if ( wxTheApp->ProcessIdle() )
             sleepTime = kEventDurationNoWait ;
         else
-            sleepTime = kEventDurationForever ;
+        {
+            if (g_numberOfThreads)
+            {
+                sleepTime = kEventDurationNoWait;
+            }
+            else
+            {
+                sleepTime = kEventDurationSecond;
+            }
+        }
     }
     else if ( status == eventLoopQuitErr )
     {
@@ -1284,7 +1294,16 @@ void wxApp::MacDoOneEvent()
         if ( wxTheApp->ProcessIdle() )
             sleepTime = kEventDurationNoWait;
         else
-            sleepTime = GetCaretTime() / 2 ;
+        {
+            if (g_numberOfThreads)
+            {
+                sleepTime = kEventDurationNoWait;
+            }
+            else
+            {
+                sleepTime = kEventDurationSecond;
+            }
+        }
     }
     if ( event.what != kHighLevelEvent )
         SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v ,  event.where.h + 1 , event.where.v + 1 ) ;
index 8c6e856cc6efa3617710388802a01b387e9209df..3634a69ddec7e9aa49ce2efc0d8992e072602df7 100644 (file)
@@ -64,6 +64,7 @@ enum wxThreadState
 
 static ThreadID gs_idMainThread = kNoThreadID ;
 static bool gs_waitingForThread = FALSE ;
+size_t g_numberOfThreads = 0;
 
 // ============================================================================
 // MacOS implementation of thread classes
@@ -531,7 +532,7 @@ void wxThread::Sleep(unsigned long milliseconds)
     do
     {
         YieldToAnyThread();
-    } while( clock() - start < milliseconds /  1000.0 * CLOCKS_PER_SEC ) ;
+    } while( clock() - start < milliseconds * CLOCKS_PER_SEC /  1000.0 ) ;
 }
 
 int wxThread::GetCPUCount()
@@ -571,6 +572,7 @@ bool wxThread::SetConcurrency(size_t level)
 
 wxThread::wxThread(wxThreadKind kind)
 {
+    g_numberOfThreads++;
     m_internal = new wxThreadInternal();
 
     m_isDetached = kind == wxTHREAD_DETACHED;
@@ -579,6 +581,17 @@ wxThread::wxThread(wxThreadKind kind)
 
 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;
index 8c6e856cc6efa3617710388802a01b387e9209df..3634a69ddec7e9aa49ce2efc0d8992e072602df7 100644 (file)
@@ -64,6 +64,7 @@ enum wxThreadState
 
 static ThreadID gs_idMainThread = kNoThreadID ;
 static bool gs_waitingForThread = FALSE ;
+size_t g_numberOfThreads = 0;
 
 // ============================================================================
 // MacOS implementation of thread classes
@@ -531,7 +532,7 @@ void wxThread::Sleep(unsigned long milliseconds)
     do
     {
         YieldToAnyThread();
-    } while( clock() - start < milliseconds /  1000.0 * CLOCKS_PER_SEC ) ;
+    } while( clock() - start < milliseconds * CLOCKS_PER_SEC /  1000.0 ) ;
 }
 
 int wxThread::GetCPUCount()
@@ -571,6 +572,7 @@ bool wxThread::SetConcurrency(size_t level)
 
 wxThread::wxThread(wxThreadKind kind)
 {
+    g_numberOfThreads++;
     m_internal = new wxThreadInternal();
 
     m_isDetached = kind == wxTHREAD_DETACHED;
@@ -579,6 +581,17 @@ wxThread::wxThread(wxThreadKind kind)
 
 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;