/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: Thread.hpp Date: 2021-6-9 Author: Reece ***/ #pragma once #include "AbstractThreadVectors.hpp" namespace Aurora::Threading::Threads { class TLSView; /// Threads may be reimplemented as fibers or under some other userland context switcher class IAuroraThread { public: virtual void Run() = 0; virtual void Exit() = 0; virtual bool Exiting() = 0; virtual void SendExitSignal() = 0; virtual void SetPrio(EThreadPrio prio) = 0; virtual void SetAffinity(AuUInt32 mask) = 0; virtual void SetName(const AuString &name) = 0; virtual EThreadPrio GetPrio() = 0; virtual AuUInt32 GetMask() = 0; virtual AuString GetName() = 0; virtual AuSPtr GetTlsView() = 0; virtual void ExecuteInDeadThread(std::function callback) = 0; virtual IWaitable * AsWaitable() = 0; }; AUKN_SYM IAuroraThread *GetThread(); AUKN_SYM AuThreadId_t GetThreadId(); /** Constructs a thread instance given a set of callbacks */ AUKN_SHARED_API(Thread, IAuroraThread, const AbstractThreadVectors &vectors); }