/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ThreadState.hpp Date: 2021-11-1 Author: Reece ***/ #pragma once #include "AsyncRunnable.hpp" namespace Aurora::Async { using WorkEntry_t = AuPair>; // TODO: this is a hack because i havent implemented an epoll abstraction yet struct AsyncAppWaitSourceRequest { AuConsumer, bool> callback; AuSPtr loopSource; AuUInt32 requestedOffset; AuUInt64 startTime; AuUInt64 endTime; }; struct GroupState; struct AsyncLoop; struct ThreadState { WorkerId_t id; AuUInt8 multipopCount = 1; AuUInt32 lastFrameTime {}; AuThreads::ThreadShared_t threadObject; AuWPtr parent; AuThreadPrimitives::SemaphoreUnique_t syncSema; AuList> features; bool rejecting {}; bool exiting {}; bool shuttingdown {}; bool exitingflag2 {}; AuThreadPrimitives::EventUnique_t running; //bool running; AuList loopSources; AuList pendingWorkItems; AuSPtr asyncLoop; Utility::RateLimiter rateLimiter; ERunMode runMode; int cookie {0}; bool bAlreadyDoingExitTick {}; bool bBreakEarly {}; bool bIsKiller {}; // AuThreadPrimitives::SpinLock externalFencesLock; AuList externalFences; }; }