Added wxYieldIfNeeded
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9410 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
b7aaabf86f
commit
cb2713bfa8
@ -302,6 +302,9 @@ WXDLLEXPORT wxWindow* wxFindWindowAtPoint(const wxPoint& pt);
|
|||||||
// Yield to other apps/messages
|
// Yield to other apps/messages
|
||||||
WXDLLEXPORT bool wxYield();
|
WXDLLEXPORT bool wxYield();
|
||||||
|
|
||||||
|
// Like wxYield, but fails silently if the yield is recursive.
|
||||||
|
WXDLLEXPORT bool wxYieldIfNeeded();
|
||||||
|
|
||||||
// Yield to other apps/messages and disable user input
|
// Yield to other apps/messages and disable user input
|
||||||
WXDLLEXPORT bool wxSafeYield(wxWindow *win = NULL);
|
WXDLLEXPORT bool wxSafeYield(wxWindow *win = NULL);
|
||||||
|
|
||||||
|
@ -80,6 +80,8 @@ void wxExit()
|
|||||||
// wxYield
|
// wxYield
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
static bool gs_inYield = FALSE;
|
||||||
|
|
||||||
bool wxYield()
|
bool wxYield()
|
||||||
{
|
{
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
@ -90,14 +92,12 @@ bool wxYield()
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_THREADS
|
#endif // wxUSE_THREADS
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
#ifdef __WXDEBUG__
|
||||||
static bool s_inYield = FALSE;
|
if (gs_inYield)
|
||||||
|
|
||||||
if (s_inYield)
|
|
||||||
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
||||||
|
|
||||||
s_inYield = TRUE;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
gs_inYield = TRUE;
|
||||||
|
|
||||||
if (!g_isIdle)
|
if (!g_isIdle)
|
||||||
{
|
{
|
||||||
@ -123,13 +123,24 @@ bool wxYield()
|
|||||||
// let the logs be flashed again
|
// let the logs be flashed again
|
||||||
wxLog::Resume();
|
wxLog::Resume();
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
gs_inYield = FALSE;
|
||||||
s_inYield = FALSE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// wxYieldIfNeeded
|
||||||
|
// Like wxYield, but fails silently if the yield is recursive.
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxYieldIfNeeded()
|
||||||
|
{
|
||||||
|
if (gs_inYield)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return wxYield();
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxWakeUpIdle
|
// wxWakeUpIdle
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -80,6 +80,8 @@ void wxExit()
|
|||||||
// wxYield
|
// wxYield
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
static bool gs_inYield = FALSE;
|
||||||
|
|
||||||
bool wxYield()
|
bool wxYield()
|
||||||
{
|
{
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
@ -90,14 +92,12 @@ bool wxYield()
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_THREADS
|
#endif // wxUSE_THREADS
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
#ifdef __WXDEBUG__
|
||||||
static bool s_inYield = FALSE;
|
if (gs_inYield)
|
||||||
|
|
||||||
if (s_inYield)
|
|
||||||
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
||||||
|
|
||||||
s_inYield = TRUE;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
gs_inYield = TRUE;
|
||||||
|
|
||||||
if (!g_isIdle)
|
if (!g_isIdle)
|
||||||
{
|
{
|
||||||
@ -123,13 +123,24 @@ bool wxYield()
|
|||||||
// let the logs be flashed again
|
// let the logs be flashed again
|
||||||
wxLog::Resume();
|
wxLog::Resume();
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
gs_inYield = FALSE;
|
||||||
s_inYield = FALSE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// wxYieldIfNeeded
|
||||||
|
// Like wxYield, but fails silently if the yield is recursive.
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxYieldIfNeeded()
|
||||||
|
{
|
||||||
|
if (gs_inYield)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return wxYield();
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxWakeUpIdle
|
// wxWakeUpIdle
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -855,12 +855,22 @@ void wxCYield()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Yield to other processes
|
// Yield to other processes
|
||||||
|
|
||||||
|
static bool gs_inYield = FALSE;
|
||||||
|
|
||||||
bool wxYield()
|
bool wxYield()
|
||||||
{
|
{
|
||||||
#if wxUSE_THREADS
|
#ifdef __WXDEBUG__
|
||||||
YieldToAnyThread() ;
|
if (gs_inYield)
|
||||||
|
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
||||||
#endif
|
#endif
|
||||||
EventRecord event ;
|
|
||||||
|
gs_inYield = TRUE;
|
||||||
|
|
||||||
|
#if wxUSE_THREADS
|
||||||
|
YieldToAnyThread() ;
|
||||||
|
#endif
|
||||||
|
EventRecord event ;
|
||||||
|
|
||||||
long sleepTime = 0 ; //::GetCaretTime();
|
long sleepTime = 0 ; //::GetCaretTime();
|
||||||
|
|
||||||
@ -870,7 +880,19 @@ bool wxYield()
|
|||||||
}
|
}
|
||||||
|
|
||||||
wxMacProcessNotifierAndPendingEvents() ;
|
wxMacProcessNotifierAndPendingEvents() ;
|
||||||
return TRUE;
|
|
||||||
|
gs_inYield = FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Yield to incoming messages; but fail silently if recursion is detected.
|
||||||
|
bool wxYieldIfNeeded()
|
||||||
|
{
|
||||||
|
if (gs_inYield)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return wxYield();
|
||||||
}
|
}
|
||||||
|
|
||||||
// platform specifics
|
// platform specifics
|
||||||
|
@ -855,12 +855,22 @@ void wxCYield()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Yield to other processes
|
// Yield to other processes
|
||||||
|
|
||||||
|
static bool gs_inYield = FALSE;
|
||||||
|
|
||||||
bool wxYield()
|
bool wxYield()
|
||||||
{
|
{
|
||||||
#if wxUSE_THREADS
|
#ifdef __WXDEBUG__
|
||||||
YieldToAnyThread() ;
|
if (gs_inYield)
|
||||||
|
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
||||||
#endif
|
#endif
|
||||||
EventRecord event ;
|
|
||||||
|
gs_inYield = TRUE;
|
||||||
|
|
||||||
|
#if wxUSE_THREADS
|
||||||
|
YieldToAnyThread() ;
|
||||||
|
#endif
|
||||||
|
EventRecord event ;
|
||||||
|
|
||||||
long sleepTime = 0 ; //::GetCaretTime();
|
long sleepTime = 0 ; //::GetCaretTime();
|
||||||
|
|
||||||
@ -870,7 +880,19 @@ bool wxYield()
|
|||||||
}
|
}
|
||||||
|
|
||||||
wxMacProcessNotifierAndPendingEvents() ;
|
wxMacProcessNotifierAndPendingEvents() ;
|
||||||
return TRUE;
|
|
||||||
|
gs_inYield = FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Yield to incoming messages; but fail silently if recursion is detected.
|
||||||
|
bool wxYieldIfNeeded()
|
||||||
|
{
|
||||||
|
if (gs_inYield)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return wxYield();
|
||||||
}
|
}
|
||||||
|
|
||||||
// platform specifics
|
// platform specifics
|
||||||
|
@ -736,8 +736,18 @@ void wxExit()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Yield to other processes
|
// Yield to other processes
|
||||||
|
|
||||||
|
static bool gs_inYield = FALSE;
|
||||||
|
|
||||||
bool wxYield()
|
bool wxYield()
|
||||||
{
|
{
|
||||||
|
#ifdef __WXDEBUG__
|
||||||
|
if (gs_inYield)
|
||||||
|
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
gs_inYield = TRUE;
|
||||||
|
|
||||||
while (wxTheApp && wxTheApp->Pending())
|
while (wxTheApp && wxTheApp->Pending())
|
||||||
wxTheApp->Dispatch();
|
wxTheApp->Dispatch();
|
||||||
|
|
||||||
@ -746,9 +756,21 @@ bool wxYield()
|
|||||||
XtAppProcessEvent((XtAppContext) wxTheApp->GetAppContext(), XtIMAll);
|
XtAppProcessEvent((XtAppContext) wxTheApp->GetAppContext(), XtIMAll);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
gs_inYield = FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Yield to incoming messages; but fail silently if recursion is detected.
|
||||||
|
bool wxYieldIfNeeded()
|
||||||
|
{
|
||||||
|
if (gs_inYield)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return wxYield();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO use XmGetPixmap (?) to get the really standard icons!
|
// TODO use XmGetPixmap (?) to get the really standard icons!
|
||||||
|
|
||||||
#include "wx/generic/info.xpm"
|
#include "wx/generic/info.xpm"
|
||||||
|
@ -1280,12 +1280,22 @@ void wxExit()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Yield to incoming messages
|
// Yield to incoming messages
|
||||||
|
|
||||||
|
static bool gs_inYield = FALSE;
|
||||||
|
|
||||||
bool wxYield()
|
bool wxYield()
|
||||||
{
|
{
|
||||||
// disable log flushing from here because a call to wxYield() shouldn't
|
// disable log flushing from here because a call to wxYield() shouldn't
|
||||||
// normally result in message boxes popping up &c
|
// normally result in message boxes popping up &c
|
||||||
wxLog::Suspend();
|
wxLog::Suspend();
|
||||||
|
|
||||||
|
#ifdef __WXDEBUG__
|
||||||
|
if (gs_inYield)
|
||||||
|
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
gs_inYield = TRUE;
|
||||||
|
|
||||||
// we don't want to process WM_QUIT from here - it should be processed in
|
// we don't want to process WM_QUIT from here - it should be processed in
|
||||||
// the main event loop in order to stop it
|
// the main event loop in order to stop it
|
||||||
MSG msg;
|
MSG msg;
|
||||||
@ -1307,9 +1317,20 @@ bool wxYield()
|
|||||||
// let the logs be flashed again
|
// let the logs be flashed again
|
||||||
wxLog::Resume();
|
wxLog::Resume();
|
||||||
|
|
||||||
|
gs_inYield = FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Yield to incoming messages; but fail silently if recursion is detected.
|
||||||
|
bool wxYieldIfNeeded()
|
||||||
|
{
|
||||||
|
if (gs_inYield)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return wxYield();
|
||||||
|
}
|
||||||
|
|
||||||
bool wxHandleFatalExceptions(bool doit)
|
bool wxHandleFatalExceptions(bool doit)
|
||||||
{
|
{
|
||||||
#if wxUSE_ON_FATAL_EXCEPTION
|
#if wxUSE_ON_FATAL_EXCEPTION
|
||||||
|
Loading…
Reference in New Issue
Block a user