AuroraRuntime/Include/Aurora/Async/Async.hpp

74 lines
2.6 KiB
C++
Raw Normal View History

2021-06-27 21:25:29 +00:00
/***
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: Async.hpp
2021-09-06 10:58:08 +00:00
Date: 2021-7-14
2021-06-27 21:25:29 +00:00
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
{
2022-08-20 06:53:48 +00:00
AUKN_SYM IAsyncApp * GetAsyncApp();
2022-03-23 16:33:02 +00:00
AUKN_SYM AuSPtr<IAsyncApp> GetSharedAsyncApp();
///
AUKN_SYM WorkerPId_t GetCurrentWorkerPId();
AUKN_SYM AuSPtr<IWorkItem> NewWorkItem(const WorkerId_t &worker, const AuSPtr<IWorkItemHandler> &task);
2022-08-20 06:53:48 +00:00
/**
* @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<IWorkItem> NewWorkItem(const WorkerPId_t &worker, const AuSPtr<IWorkItemHandler> &task);
AUKN_SYM AuSPtr<IWorkItem> NewWorkFunction(const WorkerPId_t &worker, AuVoidFunc func);
2021-06-27 21:25:29 +00:00
AUKN_SYM AuSPtr<IAsyncTimer> NewTimer(AuUInt64 uPeriodNS,
const AuSPtr<IAsyncTimerCallback> &pCallback,
2023-12-08 10:26:12 +00:00
AuOptional<WorkerPId_t> workerPid = {},
AuOptional<AuUInt64> uStartTime = {});
AUKN_SYM AuSPtr<IAsyncTimer> NewTimer(AuUInt64 uPeriodNS,
const AuSupplierConsumer<bool, AuUInt64, AuUInt64, AuUInt64> &callback,
2023-12-08 10:26:12 +00:00
AuOptional<WorkerPId_t> workerPid = {},
AuOptional<AuUInt64> uStartTime = {});
2023-09-15 15:49:48 +00:00
static inline AuSPtr<IWorkItem> DispatchOn(const WorkerPId_t &worker, AuVoidFunc func)
{
auto pThat = NewWorkFunction(worker, func);
SysAssert(pThat);
return pThat->Dispatch();
}
AUKN_SYM AuSPtr<IWorkItem> NewFence();
2021-06-27 21:25:29 +00:00
AUKN_SYM AuSPtr<IThreadPool> NewThreadPool();
2022-08-20 06:53:48 +00:00
AUKN_SYM void SetMainThreadForSysPumpScheduling(WorkerPId_t pid);
AUKN_SYM AuSPtr<IO::IIOProcessor> GetSelfIOProcessor();
AUKN_SYM AuSPtr<IO::Net::INetInterface> GetSelfIONetInterface();
AUKN_SYM AuSPtr<IO::Net::INetWorker> GetSelfIONetWorker();
AUKN_SYM AuSPtr<IO::CompletionGroup::ICompletionGroup> GetSelfIOGroup();
}
#if !defined(_CPPSHARP)
#include "IPCPromises.hpp"
#endif