59template<
typename TTask>
105 virtual void DoThreadedWork()
114 virtual void Abandon(
void)
116 if (Task.CanAbandon())
129 template<
typename...T>
139 Start(
true,
nullptr);
213 FEvent* DoneEvent =
nullptr;
221 int64 RequiredMemory = -1;
223 const TCHAR * DebugName =
nullptr;
296 void FinishThreadedWork()
310 void DoThreadedWork()
final
313 FinishThreadedWork();
331 FinishThreadedWork();
399 return RequiredMemory;
441 FinishThreadedWork();
445 else if (WorkNotFinishedCounter.
GetValue())
490 FinishThreadedWork();
510 if (TimeLimitSeconds <= 0.0f)
546 SyncCompletion(
false);
556 if (WorkNotFinishedCounter.
GetValue())
568 return WorkNotFinishedCounter.
GetValue() == 0 && QueuedPool == 0;
582template<
typename TTask>
589 struct CMarkAsCanceled
591 template <
typename TaskType>
592 auto Requires(TaskType& Task) ->
decltype(
593 Task.MarkAsCanceled()
600 void MarkAsCanceled()
final
604 Task.MarkAsCanceled();
612 Init(Task.GetStatId());
621 Init(Task.GetStatId());
644 if (Task.CanAbandon())
#define check(expr)
Definition AssertionMacros.h:314
#define DECLARE_SCOPE_CYCLE_COUNTER(CounterName, StatId, GroupId)
Definition Stats.h:653
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
EQueuedWorkFlags
Definition IQueuedWork.h:10
void Init()
Definition LockFreeList.h:4
EQueuedWorkPriority
Definition QueuedThreadPool.h:14
FQueuedThreadPool * GThreadPool
Definition ThreadingBase.cpp:48
Definition AsyncWork.h:209
void Init(TStatId InStatId)
Definition AsyncWork.h:355
int64 GetRequiredMemory() const final
Definition AsyncWork.h:397
bool IsWorkDone() const
Definition AsyncWork.h:554
const TCHAR * GetDebugName() const final
Definition AsyncWork.h:402
bool IsIdle() const
Definition AsyncWork.h:566
bool SetPriority(EQueuedWorkPriority QueuedWorkPriority)
Definition AsyncWork.h:571
void EnsureCompletion(bool bDoWorkOnThisThreadIfNotStarted=true, bool bIsLatencySensitive=false)
Definition AsyncWork.h:429
bool Reschedule(FQueuedThreadPool *InQueuedPool=GThreadPool, EQueuedWorkPriority InQueuedWorkPriority=EQueuedWorkPriority::Normal)
Definition AsyncWork.h:461
bool WaitCompletionWithTimeout(float TimeLimitSeconds)
Definition AsyncWork.h:508
EQueuedWorkPriority GetPriority() const
Definition AsyncWork.h:576
virtual void DoTaskWork()=0
void StartSynchronousTask(EQueuedWorkPriority InQueuedWorkPriority=EQueuedWorkPriority::Normal, EQueuedWorkFlags InQueuedWorkFlags=EQueuedWorkFlags::None, int64 InRequiredMemory=-1, const TCHAR *InDebugName=nullptr)
Definition AsyncWork.h:411
void StartBackgroundTask(FQueuedThreadPool *InQueuedPool=GThreadPool, EQueuedWorkPriority InQueuedWorkPriority=EQueuedWorkPriority::Normal, EQueuedWorkFlags InQueuedWorkFlags=EQueuedWorkFlags::None, int64 InRequiredMemory=-1, const TCHAR *InDebugName=nullptr)
Definition AsyncWork.h:419
bool IsDone()
Definition AsyncWork.h:540
bool Cancel()
Definition AsyncWork.h:482
virtual ~FAsyncTaskBase()
Definition AsyncWork.h:387
virtual void MarkAsCanceled()
Definition AsyncWork.h:381
virtual bool TryAbandonTask()=0
void CheckIdle() const
Definition AsyncWork.h:363
Definition AsyncWork.h:585
bool TryAbandonTask() final
Definition AsyncWork.h:642
FAsyncTask(Arg0Type &&Arg0, ArgTypes &&... Args)
Definition AsyncWork.h:617
const TTask & GetTask() const
Definition AsyncWork.h:636
void DoTaskWork() final
Definition AsyncWork.h:653
FAsyncTask()
Definition AsyncWork.h:608
TTask & GetTask()
Definition AsyncWork.h:627
Definition AsyncWork.h:63
FAutoDeleteAsyncTask(T &&... Args)
Definition AsyncWork.h:130
void StartBackgroundTask(FQueuedThreadPool *InQueuedPool=GThreadPool, EQueuedWorkPriority InPriority=EQueuedWorkPriority::Normal)
Definition AsyncWork.h:145
void StartSynchronousTask()
Definition AsyncWork.h:137
virtual bool Wait(uint32 WaitTime, const bool bIgnoreThreadIdleStats=false)=0
Definition AsyncWork.h:663
void Abandon()
Definition AsyncWork.h:669
bool CanAbandon()
Definition AsyncWork.h:665
Definition QueuedThreadPool.h:105
virtual bool RetractQueuedWork(IQueuedWork *InQueuedWork)=0
virtual void AddQueuedWork(IQueuedWork *InQueuedWork, EQueuedWorkPriority InQueuedWorkPriority=EQueuedWorkPriority::Normal)=0
Definition LightweightStats.h:424
Definition ThreadSafeCounter.h:14
int32 Increment()
Definition ThreadSafeCounter.h:52
int32 Decrement()
Definition ThreadSafeCounter.h:75
int32 GetValue() const
Definition ThreadSafeCounter.h:120
Definition IQueuedWork.h:62
Definition InheritedContext.h:118
CORE_API FInheritedContextScope RestoreInheritedContext()
Definition InheritedContext.cpp:8
void CaptureInheritedContext()
Definition InheritedContext.h:121
Definition InheritedContext.h:54
@ Warning
Definition LogVerbosity.h:34
static UE_FORCEINLINE_HINT void MemoryBarrier()
Definition AndroidPlatformMisc.h:249
static CORE_API void DumpStackTraceToLog(const ELogVerbosity::Type LogVerbosity)
Definition AssertionMacros.cpp:817
Definition LightweightStats.h:416