From bf03124f92573ec7efa237d173a0da2592391d8f Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Tue, 12 Sep 2023 18:47:25 +0100 Subject: [PATCH] [+] AuThreading::TryWait --- Include/Aurora/Threading/WaitFor.hpp | 1 + Source/Threading/AuWaitFor.cpp | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Include/Aurora/Threading/WaitFor.hpp b/Include/Aurora/Threading/WaitFor.hpp index 74c97320..c9dc98eb 100644 --- a/Include/Aurora/Threading/WaitFor.hpp +++ b/Include/Aurora/Threading/WaitFor.hpp @@ -14,6 +14,7 @@ namespace Aurora::Threading AUKN_SYM bool YieldPollNs(bool bPermitMultipleContextSwitches, AuUInt64 qwAbsTimeoutNs, PollCallback_cb cb); AUKN_SYM bool WaitForAbsNS(IWaitable *pWaitable, AuUInt64 qwAbsTimeout = 0); + AUKN_SYM bool TryWait(IWaitable *pWaitable); static const auto kWaitForFlagTimeoutIsNanoseconds = 1ul; static const auto kWaitForFlagTimeoutIsAbsolute = 1ul << 1; diff --git a/Source/Threading/AuWaitFor.cpp b/Source/Threading/AuWaitFor.cpp index 9792551f..676b542c 100644 --- a/Source/Threading/AuWaitFor.cpp +++ b/Source/Threading/AuWaitFor.cpp @@ -88,7 +88,20 @@ namespace Aurora::Threading return pWaitable->TryLock(); }); } - + + AUKN_SYM bool TryWait(IWaitable *pWaitable) + { + if (pWaitable->HasLockImplementation()) + { + return pWaitable->TryLock(); + } + + return Primitives::DoTryIf([=]() + { + return pWaitable->TryLock(); + }); + } + AUKN_SYM bool WaitFor(const AuList &waitables, AuUInt32 uFlags, AuUInt64 uTimeout) { AU_DEBUG_MEMCRUNCH;