diff --git a/Include/Aurora/Threading/IWaitable.hpp b/Include/Aurora/Threading/IWaitable.hpp index ee5c81c9..5c832176 100644 --- a/Include/Aurora/Threading/IWaitable.hpp +++ b/Include/Aurora/Threading/IWaitable.hpp @@ -10,6 +10,7 @@ namespace Aurora::Time { AUKN_SYM AuUInt64 SteadyClockNS(); + AUKN_SYM AuUInt64 SteadyClockMS(); } namespace Aurora::Threading @@ -43,17 +44,33 @@ namespace Aurora::Threading inline virtual bool LockAbsMS(AuUInt64 qwAbsTimeoutInMs /* = 0, infinity*/) { - if (!qwAbsTimeoutInMs) return this->LockNS(0); - auto iTimeDelta = AuInt64(AuMSToNS(qwAbsTimeoutInMs)) - AuInt64(Aurora::Time::SteadyClockNS()); - if (iTimeDelta <= 0) return TryLock(); - return this->LockNS(iTimeDelta); + if (!qwAbsTimeoutInMs) + { + return this->LockNS(0); + } + + auto iTimeMSDelta = AuInt64(qwAbsTimeoutInMs) - AuInt64(Aurora::Time::SteadyClockMS()); + if (iTimeMSDelta <= 0) + { + return this->TryLock(); + } + + return this->LockAbsNS(AuMSToNS(iTimeMSDelta) + Aurora::Time::SteadyClockNS()); } inline virtual bool LockAbsNS(AuUInt64 qwAbsTimeoutInNs /* = 0, infinity*/) { - if (!qwAbsTimeoutInNs) return this->LockNS(0); + if (!qwAbsTimeoutInNs) + { + return this->LockNS(0); + } + auto iTimeDelta = AuInt64(qwAbsTimeoutInNs) - AuInt64(Aurora::Time::SteadyClockNS()); - if (iTimeDelta <= 0) return TryLock(); + if (iTimeDelta <= 0) + { + return this->TryLock(); + } + return this->LockNS(iTimeDelta); }