/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: Async.hpp Date: 2021-7-14 Author: Reece ***/ #pragma once #include "EWorkPriority.hpp" #include "ETickType.hpp" #include "AsyncTypes.hpp" #include "IWorkItem.hpp" #include "IWorkItemHandler.hpp" #include "IAsyncTimer.hpp" #include "IAsyncTimerCallback.hpp" #include "IThreadPool.hpp" #include "IAsyncApp.hpp" namespace Aurora::Async { AUKN_SYM IAsyncApp * GetAsyncApp(); AUKN_SYM AuSPtr GetSharedAsyncApp(); /// AUKN_SYM WorkerPId_t GetCurrentWorkerPId(); AUKN_SYM AuSPtr NewWorkItem(const WorkerId_t &worker, const AuSPtr &task); /** * @brief Creates an asynchronous job object to be executed on an async runner * @param worker A worker id pair. Supports AuAsync::kThreadIdAny to run on any runner within the group. * @param task An interface to run the job/work/task in question * @return */ AUKN_SYM AuSPtr NewWorkItem(const WorkerPId_t &worker, const AuSPtr &task); AUKN_SYM AuSPtr NewWorkFunction(const WorkerPId_t &worker, AuVoidFunc func); AUKN_SYM AuSPtr NewTimer(AuUInt64 uPeriodNS, const AuSPtr &pCallback, AuOptional workerPid = {}, AuOptional uStartTime = {}); AUKN_SYM AuSPtr NewTimer(AuUInt64 uPeriodNS, const AuSupplierConsumer &callback, AuOptional workerPid = {}, AuOptional uStartTime = {}); static inline AuSPtr DispatchOn(const WorkerPId_t &worker, AuVoidFunc func) { auto pThat = NewWorkFunction(worker, func); SysAssert(pThat); return pThat->Dispatch(); } AUKN_SYM AuSPtr NewFence(); AUKN_SYM AuSPtr NewThreadPool(); AUKN_SYM void SetMainThreadForSysPumpScheduling(WorkerPId_t pid); AUKN_SYM AuSPtr GetSelfIOProcessor(); AUKN_SYM AuSPtr GetSelfIONetInterface(); AUKN_SYM AuSPtr GetSelfIONetWorker(); AUKN_SYM AuSPtr GetSelfIOGroup(); } #if !defined(_CPPSHARP) #include "IPCPromises.hpp" #endif