diff --git a/uppsrc/CtrlCore/CtrlCore.h b/uppsrc/CtrlCore/CtrlCore.h index f3467c1dd..050eec490 100644 --- a/uppsrc/CtrlCore/CtrlCore.h +++ b/uppsrc/CtrlCore/CtrlCore.h @@ -42,6 +42,7 @@ INITIALIZE(CtrlCore) #ifdef _MULTITHREADED void EnterGuiMutex(); +bool TryEnterGuiMutex(); void LeaveGuiMutex(); int LeaveGuiMutexAll(); @@ -51,6 +52,7 @@ bool ThreadHasGuiLock(); #else inline void EnterGuiMutex() {} inline void LeaveGuiMutex() {} +inline bool TryEnterGuiMutex() { return true; } inline int LeaveGuiMutexAll() { return 0; } inline void EnterGuiMutex(int) {} diff --git a/uppsrc/CtrlCore/CtrlMt.cpp b/uppsrc/CtrlCore/CtrlMt.cpp index ae18975fa..fcd18675e 100644 --- a/uppsrc/CtrlCore/CtrlMt.cpp +++ b/uppsrc/CtrlCore/CtrlMt.cpp @@ -29,6 +29,15 @@ void EnterGuiMutex(int n) LLOG("EnterGuiMutex " << sGLockLevel << ' ' << IsMainThread()); } +bool TryEnterGuiMutex() +{ + if(sGLockLevel == 0 && sGLock.TryEnter()) { + sGLockLevel++; + return true; + } + return false; +} + void LeaveGuiMutex() { LLOG(">LeaveGuiMutex " << sGLockLevel << ' ' << IsMainThread());