内容纲要
AsyncTask 是基于 FRunnable 的封装。
实例:
//定义委托,用来跨线程调用
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMyAsyncTaskNodeResult, int32, Result);
//声明委托
UPROPERTY(BlueprintAssignable)
FMyAsyncTaskNodeResult OnSuccess;
UPROPERTY(BlueprintAssignable)
FMyAsyncTaskNodeResult OnFail;
//需要继承 FNonAbandonableTask
//声明 FAutoDeleteAsyncTask<> 或 FAsyncTask<>
//用 StartBackgroundTask 或 StartSynchronousTask 开始任务
//用 StartSynchronousTask 开始任务好像还是单线程执行
//实现 DoWork ,要注意的是调用UE4对象需要在游戏线程中去执行
//使用AsnycTask可以将制定代码放在指定线程中执行,例如更新文理必须放在游戏线程。
AsyncTask(ENamedThreads::GameThread, [=]()
{
//比如更新文理必须放在游戏线程。
updateTeacherMaterialTexture();
//比如具体逻辑委托调用,委托蓝图连接视图渲染
Node->OnSuccess.Broadcast(Actor->Counter);
});
//将 MyClassName 替换成自己的类名
FORCEINLINE TStatId GetStatId() const
{
RETURN_QUICK_DECLARE_CYCLE_STAT(MyClassName,STATGROUP_ThreadPoolAsyncTasks);
}