AuroraRuntime/Include/Aurora/Threading/Threads/Thread.hpp
2021-06-27 22:25:29 +01:00

47 lines
1.5 KiB
C++

/***
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<TLSView> GetTlsView() = 0;
virtual void ExecuteInDeadThread(std::function<void()> 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);
}