[*] 64ce35dd
cont
This commit is contained in:
parent
880388ea73
commit
9fea60a9ed
@ -18,11 +18,14 @@
|
|||||||
#include "ILoopQueue.hpp"
|
#include "ILoopQueue.hpp"
|
||||||
|
|
||||||
namespace Aurora::IO::Loop
|
namespace Aurora::IO::Loop
|
||||||
{
|
{
|
||||||
|
// optTimeoutMS = {} | indefinite
|
||||||
|
// optTimeoutMS = 0 | poll
|
||||||
|
// optTimeoutMS = 1 | 1ms
|
||||||
AUKN_SYM bool WaitMultipleLoopSources(const AuList<AuSPtr<Loop::ILoopSource>> &lsList,
|
AUKN_SYM bool WaitMultipleLoopSources(const AuList<AuSPtr<Loop::ILoopSource>> &lsList,
|
||||||
AuList<AuSPtr<Loop::ILoopSource>> &signaled,
|
AuList<AuSPtr<Loop::ILoopSource>> &signaled,
|
||||||
bool bAny = true,
|
bool bAny = true,
|
||||||
AuOptionalEx<AuUInt32> uTimeoutMS = 0);
|
AuOptional<AuUInt32> optTimeoutMS = {});
|
||||||
|
|
||||||
struct ILSSemaphore : virtual ILoopSource
|
struct ILSSemaphore : virtual ILoopSource
|
||||||
{
|
{
|
||||||
|
@ -101,6 +101,10 @@ namespace Aurora::IO::Loop
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool bZeroTick { optTimeoutMS && optTimeoutMS.value() == 0 };
|
||||||
|
bool bHasTimeOut { optTimeoutMS && optTimeoutMS.value() };
|
||||||
|
bool bSleepForever { !optTimeoutMS };
|
||||||
|
|
||||||
if (lsList.size() == 1)
|
if (lsList.size() == 1)
|
||||||
{
|
{
|
||||||
auto pSource = lsList[0];
|
auto pSource = lsList[0];
|
||||||
@ -110,7 +114,11 @@ namespace Aurora::IO::Loop
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool bStatus {};
|
bool bStatus {};
|
||||||
if (optTimeoutMS)
|
if (bSleepForever)
|
||||||
|
{
|
||||||
|
bStatus = pSource->WaitOn(0);
|
||||||
|
}
|
||||||
|
else if (bHasTimeOut)
|
||||||
{
|
{
|
||||||
bStatus = pSource->WaitOn(optTimeoutMS.value());
|
bStatus = pSource->WaitOn(optTimeoutMS.value());
|
||||||
}
|
}
|
||||||
@ -127,10 +135,9 @@ namespace Aurora::IO::Loop
|
|||||||
return bStatus;
|
return bStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
AuUInt64 uTimeoutEnd = optTimeoutMS.has_value() && optTimeoutMS.value() ?
|
AuUInt64 uTimeoutEnd = bHasTimeOut ?
|
||||||
AuTime::SteadyClockNS() + AuMSToNS<AuUInt64>(optTimeoutMS) :
|
AuTime::SteadyClockNS() + AuMSToNS<AuUInt64>(optTimeoutMS.value()) :
|
||||||
0;
|
0;
|
||||||
bool bZeroTick { optTimeoutMS && optTimeoutMS.value() == 0 };
|
|
||||||
|
|
||||||
AU_DEBUG_MEMCRUNCH;
|
AU_DEBUG_MEMCRUNCH;
|
||||||
|
|
||||||
@ -149,18 +156,18 @@ namespace Aurora::IO::Loop
|
|||||||
{
|
{
|
||||||
bool bStatus {};
|
bool bStatus {};
|
||||||
|
|
||||||
if (!optTimeoutMS || optTimeoutMS.value() == 0)
|
if (bSleepForever)
|
||||||
{
|
{
|
||||||
bStatus = entryZero->WaitOn(0);
|
bStatus = entryZero->WaitOn(0);
|
||||||
}
|
}
|
||||||
else if (bZeroTick)
|
else if (bHasTimeOut)
|
||||||
{
|
|
||||||
bStatus = entryZero->IsSignaled();
|
|
||||||
}
|
|
||||||
else if (optTimeoutMS)
|
|
||||||
{
|
{
|
||||||
bStatus = entryZero->WaitOn(optTimeoutMS.value());
|
bStatus = entryZero->WaitOn(optTimeoutMS.value());
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bStatus = entryZero->IsSignaled();
|
||||||
|
}
|
||||||
|
|
||||||
if (!bStatus)
|
if (!bStatus)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user