[*] Amend public headers for linux builds
This commit is contained in:
parent
c0eccaf901
commit
86e556a9bb
@ -14,7 +14,7 @@
|
|||||||
{
|
{
|
||||||
"if": "win32",
|
"if": "win32",
|
||||||
"then": {
|
"then": {
|
||||||
"links": "Bcrypt.lib"
|
"links": ["Bcrypt.lib", "UxTheme.lib"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -214,6 +214,41 @@ namespace Aurora::Async
|
|||||||
|
|
||||||
AUKN_SYM AuSPtr<IWorkItem> NewWorkItem(const WorkerId_t &worker, const AuSPtr<IWorkItemHandler> &task, bool supportsBlocking = false);
|
AUKN_SYM AuSPtr<IWorkItem> NewWorkItem(const WorkerId_t &worker, const AuSPtr<IWorkItemHandler> &task, bool supportsBlocking = false);
|
||||||
|
|
||||||
|
class IAsyncApp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Main thread logic
|
||||||
|
virtual void Start() = 0;
|
||||||
|
virtual void Main() = 0;
|
||||||
|
virtual void Shutdown() = 0;
|
||||||
|
virtual bool Exiting() = 0;
|
||||||
|
virtual void SetConsoleCommandDispatcher(WorkerId_t id) = 0;
|
||||||
|
|
||||||
|
// Spawning
|
||||||
|
virtual bool Spawn(WorkerId_t) = 0;
|
||||||
|
virtual Threading::Threads::ThreadShared_t ResolveHandle(WorkerId_t) = 0;
|
||||||
|
virtual AuBST<ThreadGroup_t, AuList<ThreadId_t>> GetThreads() = 0;
|
||||||
|
virtual WorkerId_t GetCurrentThread() = 0;
|
||||||
|
|
||||||
|
// Synchronization
|
||||||
|
// Note: syncing to yourself will nullify requireSignal to prevent deadlock
|
||||||
|
virtual bool Sync(WorkerId_t group, AuUInt32 timeoutMs = 0, bool requireSignal = false) = 0;
|
||||||
|
virtual void Signal(WorkerId_t group) = 0;
|
||||||
|
virtual void SyncAllSafe() = 0;
|
||||||
|
|
||||||
|
// Features
|
||||||
|
virtual void AddFeature(WorkerId_t id, AuSPtr<Threading::Threads::IThreadFeature> feature, bool async = false) = 0;
|
||||||
|
|
||||||
|
// Debug
|
||||||
|
virtual void AssertInThreadGroup(ThreadGroup_t thread) = 0;
|
||||||
|
virtual void AssertWorker(WorkerId_t id) = 0;
|
||||||
|
|
||||||
|
virtual bool Poll(bool block) = 0;
|
||||||
|
|
||||||
|
virtual bool AddLoopSource(const AuSPtr<Loop::ILoopSource> &loopSource, WorkerId_t workerId, AuUInt32 timeout, const AuConsumer<AuSPtr<Loop::ILoopSource>, bool> &callback) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#pragma region EASE_OF_READING
|
#pragma region EASE_OF_READING
|
||||||
struct BasicWorkStdFunc : IWorkItemHandler
|
struct BasicWorkStdFunc : IWorkItemHandler
|
||||||
{
|
{
|
||||||
@ -339,7 +374,6 @@ namespace Aurora::Async
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
||||||
static constexpr bool IsCallbackPtr = std::is_pointer_v<Job_t> || AuIsBaseOfTemplate<std::shared_ptr, Job_t>::value;
|
static constexpr bool IsCallbackPtr = std::is_pointer_v<Job_t> || AuIsBaseOfTemplate<std::shared_ptr, Job_t>::value;
|
||||||
static constexpr bool IsTaskPtr = std::is_pointer_v<Task_t> || AuIsBaseOfTemplate<std::shared_ptr, Task_t>::value;
|
static constexpr bool IsTaskPtr = std::is_pointer_v<Task_t> || AuIsBaseOfTemplate<std::shared_ptr, Task_t>::value;
|
||||||
|
|
||||||
@ -534,14 +568,7 @@ namespace Aurora::Async
|
|||||||
{
|
{
|
||||||
return TranslateAsyncReturnableFunctionToDispatcherWithThread(GetAsyncApp()->GetCurrentThread(), func);
|
return TranslateAsyncReturnableFunctionToDispatcherWithThread(GetAsyncApp()->GetCurrentThread(), func);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef ASYNC_ERROR
|
|
||||||
#undef ASYNC_FINISH
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#pragma endregion EASE_OF_READING
|
|
||||||
|
|
||||||
template<typename Info_t = AVoid, typename Result_t = AVoid, typename Task_t = FTask<Info_t, Result_t>, typename Job_t = FJob<Info_t, Result_t>>
|
template<typename Info_t = AVoid, typename Result_t = AVoid, typename Task_t = FTask<Info_t, Result_t>, typename Job_t = FJob<Info_t, Result_t>>
|
||||||
static AuSPtr<Async::IWorkItem> DispatchBasicWorkCallback(const WorkerId_t &worker, const Task_t &task, const Job_t &job, bool enableWait = false)
|
static AuSPtr<Async::IWorkItem> DispatchBasicWorkCallback(const WorkerId_t &worker, const Task_t &task, const Job_t &job, bool enableWait = false)
|
||||||
{
|
{
|
||||||
@ -554,38 +581,10 @@ namespace Aurora::Async
|
|||||||
return Async::NewWorkItem(worker, AuMakeShared<Async::BasicWorkCallback<Info_t, Result_t>>(task, job, inputParameters), enableWait)->Dispatch();
|
return Async::NewWorkItem(worker, AuMakeShared<Async::BasicWorkCallback<Info_t, Result_t>>(task, job, inputParameters), enableWait)->Dispatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef ASYNC_ERROR
|
||||||
|
#undef ASYNC_FINISH
|
||||||
|
|
||||||
class IAsyncApp
|
#endif
|
||||||
{
|
|
||||||
public:
|
#pragma endregion EASE_OF_READING
|
||||||
// Main thread logic
|
|
||||||
virtual void Start() = 0;
|
|
||||||
virtual void Main() = 0;
|
|
||||||
virtual void Shutdown() = 0;
|
|
||||||
virtual bool Exiting() = 0;
|
|
||||||
virtual void SetConsoleCommandDispatcher(WorkerId_t id) = 0;
|
|
||||||
|
|
||||||
// Spawning
|
|
||||||
virtual bool Spawn(WorkerId_t) = 0;
|
|
||||||
virtual Threading::Threads::ThreadShared_t ResolveHandle(WorkerId_t) = 0;
|
|
||||||
virtual AuBST<ThreadGroup_t, AuList<ThreadId_t>> GetThreads() = 0;
|
|
||||||
virtual WorkerId_t GetCurrentThread() = 0;
|
|
||||||
|
|
||||||
// Synchronization
|
|
||||||
// Note: syncing to yourself will nullify requireSignal to prevent deadlock
|
|
||||||
virtual bool Sync(WorkerId_t group, AuUInt32 timeoutMs = 0, bool requireSignal = false) = 0;
|
|
||||||
virtual void Signal(WorkerId_t group) = 0;
|
|
||||||
virtual void SyncAllSafe() = 0;
|
|
||||||
|
|
||||||
// Features
|
|
||||||
virtual void AddFeature(WorkerId_t id, AuSPtr<Threading::Threads::IThreadFeature> feature, bool async = false) = 0;
|
|
||||||
|
|
||||||
// Debug
|
|
||||||
virtual void AssertInThreadGroup(ThreadGroup_t thread) = 0;
|
|
||||||
virtual void AssertWorker(WorkerId_t id) = 0;
|
|
||||||
|
|
||||||
virtual bool Poll(bool block) = 0;
|
|
||||||
|
|
||||||
virtual bool AddLoopSource(const AuSPtr<Loop::ILoopSource> &loopSource, WorkerId_t workerId, AuUInt32 timeout, const AuConsumer<AuSPtr<Loop::ILoopSource>, bool> &callback) = 0;
|
|
||||||
};
|
|
||||||
}
|
}
|
@ -22,7 +22,6 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <intrin.h>
|
|
||||||
|
|
||||||
#include "../AuroraTypedefs.hpp"
|
#include "../AuroraTypedefs.hpp"
|
||||||
#include "../AuroraUtils.hpp"
|
#include "../AuroraUtils.hpp"
|
||||||
|
@ -82,7 +82,7 @@ name ## Shared_t name ## Shared(T... args) \
|
|||||||
#if defined(AURORA_COMPILER_MSVC)
|
#if defined(AURORA_COMPILER_MSVC)
|
||||||
#define AU_NORETURN __declspec(noreturn)
|
#define AU_NORETURN __declspec(noreturn)
|
||||||
#elif (defined(AURORA_COMPILER_CLANG) || defined(AURORA_COMPILER_GCC))
|
#elif (defined(AURORA_COMPILER_CLANG) || defined(AURORA_COMPILER_GCC))
|
||||||
#define AU_ALLOC __attribute__((noreturn))
|
#define AU_NORETURN __attribute__((noreturn))
|
||||||
#elif defined(AU_LANG_CPP)
|
#elif defined(AU_LANG_CPP)
|
||||||
#define AU_NORETURN [[noreturn]]
|
#define AU_NORETURN [[noreturn]]
|
||||||
#else
|
#else
|
||||||
|
Loading…
Reference in New Issue
Block a user