Applied patch #809919 (Allows wxMac threads to run at fullspeed).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24660 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -69,6 +69,7 @@
|
|||||||
extern wxList wxPendingDelete;
|
extern wxList wxPendingDelete;
|
||||||
extern wxList *wxWinMacWindowList;
|
extern wxList *wxWinMacWindowList;
|
||||||
extern wxList *wxWinMacControlList;
|
extern wxList *wxWinMacControlList;
|
||||||
|
extern size_t g_numberOfThreads;
|
||||||
|
|
||||||
// statics for implementation
|
// statics for implementation
|
||||||
|
|
||||||
@@ -1250,7 +1251,16 @@ void wxApp::MacDoOneEvent()
|
|||||||
if ( wxTheApp->ProcessIdle() )
|
if ( wxTheApp->ProcessIdle() )
|
||||||
sleepTime = kEventDurationNoWait ;
|
sleepTime = kEventDurationNoWait ;
|
||||||
else
|
else
|
||||||
sleepTime = kEventDurationForever ;
|
{
|
||||||
|
if (g_numberOfThreads)
|
||||||
|
{
|
||||||
|
sleepTime = kEventDurationNoWait;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sleepTime = kEventDurationSecond;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( status == eventLoopQuitErr )
|
else if ( status == eventLoopQuitErr )
|
||||||
{
|
{
|
||||||
@@ -1284,7 +1294,16 @@ void wxApp::MacDoOneEvent()
|
|||||||
if ( wxTheApp->ProcessIdle() )
|
if ( wxTheApp->ProcessIdle() )
|
||||||
sleepTime = kEventDurationNoWait;
|
sleepTime = kEventDurationNoWait;
|
||||||
else
|
else
|
||||||
sleepTime = GetCaretTime() / 2 ;
|
{
|
||||||
|
if (g_numberOfThreads)
|
||||||
|
{
|
||||||
|
sleepTime = kEventDurationNoWait;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sleepTime = kEventDurationSecond;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( event.what != kHighLevelEvent )
|
if ( event.what != kHighLevelEvent )
|
||||||
SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v , event.where.h + 1 , event.where.v + 1 ) ;
|
SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v , event.where.h + 1 , event.where.v + 1 ) ;
|
||||||
|
@@ -69,6 +69,7 @@
|
|||||||
extern wxList wxPendingDelete;
|
extern wxList wxPendingDelete;
|
||||||
extern wxList *wxWinMacWindowList;
|
extern wxList *wxWinMacWindowList;
|
||||||
extern wxList *wxWinMacControlList;
|
extern wxList *wxWinMacControlList;
|
||||||
|
extern size_t g_numberOfThreads;
|
||||||
|
|
||||||
// statics for implementation
|
// statics for implementation
|
||||||
|
|
||||||
@@ -1250,7 +1251,16 @@ void wxApp::MacDoOneEvent()
|
|||||||
if ( wxTheApp->ProcessIdle() )
|
if ( wxTheApp->ProcessIdle() )
|
||||||
sleepTime = kEventDurationNoWait ;
|
sleepTime = kEventDurationNoWait ;
|
||||||
else
|
else
|
||||||
sleepTime = kEventDurationForever ;
|
{
|
||||||
|
if (g_numberOfThreads)
|
||||||
|
{
|
||||||
|
sleepTime = kEventDurationNoWait;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sleepTime = kEventDurationSecond;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( status == eventLoopQuitErr )
|
else if ( status == eventLoopQuitErr )
|
||||||
{
|
{
|
||||||
@@ -1284,7 +1294,16 @@ void wxApp::MacDoOneEvent()
|
|||||||
if ( wxTheApp->ProcessIdle() )
|
if ( wxTheApp->ProcessIdle() )
|
||||||
sleepTime = kEventDurationNoWait;
|
sleepTime = kEventDurationNoWait;
|
||||||
else
|
else
|
||||||
sleepTime = GetCaretTime() / 2 ;
|
{
|
||||||
|
if (g_numberOfThreads)
|
||||||
|
{
|
||||||
|
sleepTime = kEventDurationNoWait;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sleepTime = kEventDurationSecond;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( event.what != kHighLevelEvent )
|
if ( event.what != kHighLevelEvent )
|
||||||
SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v , event.where.h + 1 , event.where.v + 1 ) ;
|
SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v , event.where.h + 1 , event.where.v + 1 ) ;
|
||||||
|
@@ -64,6 +64,7 @@ enum wxThreadState
|
|||||||
|
|
||||||
static ThreadID gs_idMainThread = kNoThreadID ;
|
static ThreadID gs_idMainThread = kNoThreadID ;
|
||||||
static bool gs_waitingForThread = FALSE ;
|
static bool gs_waitingForThread = FALSE ;
|
||||||
|
size_t g_numberOfThreads = 0;
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// MacOS implementation of thread classes
|
// MacOS implementation of thread classes
|
||||||
@@ -531,7 +532,7 @@ void wxThread::Sleep(unsigned long milliseconds)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
YieldToAnyThread();
|
YieldToAnyThread();
|
||||||
} while( clock() - start < milliseconds / 1000.0 * CLOCKS_PER_SEC ) ;
|
} while( clock() - start < milliseconds * CLOCKS_PER_SEC / 1000.0 ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxThread::GetCPUCount()
|
int wxThread::GetCPUCount()
|
||||||
@@ -571,6 +572,7 @@ bool wxThread::SetConcurrency(size_t level)
|
|||||||
|
|
||||||
wxThread::wxThread(wxThreadKind kind)
|
wxThread::wxThread(wxThreadKind kind)
|
||||||
{
|
{
|
||||||
|
g_numberOfThreads++;
|
||||||
m_internal = new wxThreadInternal();
|
m_internal = new wxThreadInternal();
|
||||||
|
|
||||||
m_isDetached = kind == wxTHREAD_DETACHED;
|
m_isDetached = kind == wxTHREAD_DETACHED;
|
||||||
@@ -579,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 ) ;
|
s_threads.Remove( (void*) this ) ;
|
||||||
if (m_internal != NULL) {
|
if (m_internal != NULL) {
|
||||||
delete m_internal;
|
delete m_internal;
|
||||||
|
@@ -64,6 +64,7 @@ enum wxThreadState
|
|||||||
|
|
||||||
static ThreadID gs_idMainThread = kNoThreadID ;
|
static ThreadID gs_idMainThread = kNoThreadID ;
|
||||||
static bool gs_waitingForThread = FALSE ;
|
static bool gs_waitingForThread = FALSE ;
|
||||||
|
size_t g_numberOfThreads = 0;
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// MacOS implementation of thread classes
|
// MacOS implementation of thread classes
|
||||||
@@ -531,7 +532,7 @@ void wxThread::Sleep(unsigned long milliseconds)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
YieldToAnyThread();
|
YieldToAnyThread();
|
||||||
} while( clock() - start < milliseconds / 1000.0 * CLOCKS_PER_SEC ) ;
|
} while( clock() - start < milliseconds * CLOCKS_PER_SEC / 1000.0 ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxThread::GetCPUCount()
|
int wxThread::GetCPUCount()
|
||||||
@@ -571,6 +572,7 @@ bool wxThread::SetConcurrency(size_t level)
|
|||||||
|
|
||||||
wxThread::wxThread(wxThreadKind kind)
|
wxThread::wxThread(wxThreadKind kind)
|
||||||
{
|
{
|
||||||
|
g_numberOfThreads++;
|
||||||
m_internal = new wxThreadInternal();
|
m_internal = new wxThreadInternal();
|
||||||
|
|
||||||
m_isDetached = kind == wxTHREAD_DETACHED;
|
m_isDetached = kind == wxTHREAD_DETACHED;
|
||||||
@@ -579,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 ) ;
|
s_threads.Remove( (void*) this ) ;
|
||||||
if (m_internal != NULL) {
|
if (m_internal != NULL) {
|
||||||
delete m_internal;
|
delete m_internal;
|
||||||
|
Reference in New Issue
Block a user