47 lines
1.5 KiB
C++
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);
|
|
} |