55 lines
2.4 KiB
C++
55 lines
2.4 KiB
C++
/***
|
|
Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
File: IWorkItem.hpp
|
|
Date: 2021-11-1
|
|
Author: Reece
|
|
***/
|
|
#pragma once
|
|
|
|
namespace Aurora::Async
|
|
{
|
|
struct IWorkItem
|
|
{
|
|
virtual AuSPtr<IWorkItem> WaitFor(const AuSPtr<IWorkItem> &pWorkItem) = 0;
|
|
virtual AuSPtr<IWorkItem> WaitFor(const AuList<AuSPtr<IWorkItem>> &workItems) = 0;
|
|
|
|
// ms = time relative to the current time
|
|
virtual AuSPtr<IWorkItem> SetSchedTime(AuUInt32 ms) = 0;
|
|
|
|
// ns = Aurora::Time::CurrentClockMS() + relativeMs
|
|
virtual AuSPtr<IWorkItem> SetSchedTimeAbs(AuUInt32 ms) = 0;
|
|
|
|
// ns = time relative to the current time
|
|
virtual AuSPtr<IWorkItem> SetSchedTimeNs(AuUInt64 ns) = 0;
|
|
|
|
// ns = Aurora::Time::CurrentClockNS() + relativeNs
|
|
virtual AuSPtr<IWorkItem> SetSchedTimeNsAbs(AuUInt64 ns) = 0;
|
|
|
|
// ms = time relative to the time at which the work item would otherwise dispatch
|
|
virtual AuSPtr<IWorkItem> AddDelayTime(AuUInt32 ms) = 0;
|
|
|
|
// ns = time relative to the time at which the work item would otherwise dispatch
|
|
virtual AuSPtr<IWorkItem> AddDelayTimeNs(AuUInt64 ns) = 0;
|
|
|
|
// inverted WaitFor
|
|
virtual AuSPtr<IWorkItem> Then(const AuSPtr<IWorkItem> &next) = 0;
|
|
|
|
virtual AuSPtr<IWorkItem> Dispatch() = 0;
|
|
|
|
// per work frame, available work is dequed and sorted.
|
|
// work is sorted by prio and then by initial submission index.
|
|
//
|
|
// prios under .25 will yield for new work at time of possible dispatch
|
|
// only if there are work entries of > .5 in the pending work queue.
|
|
virtual void SetPrio(float val = 0.5f) = 0;
|
|
|
|
virtual bool BlockUntilComplete() = 0;
|
|
virtual bool HasFinished() = 0;
|
|
virtual bool HasFailed() = 0;
|
|
virtual void Cancel() = 0;
|
|
|
|
virtual void *GetPrivateData() = 0;
|
|
virtual AuOptional<void *> ToWorkResultT() = 0;
|
|
};
|
|
} |