UE4_异步_数据处理(Json)

38 篇文章 5 订阅
6 篇文章 4 订阅

如果一个数字城市demo,需要将第三方海量的数据进行处理展示,将数据的处理放在GameThread 上显然是不合理。这个时候需要用多线程解析数据,防止游戏线程的阻塞

关于异步和多线程

前两天面试被别人问到一个问题,异步和多线程的区别。面试的人告诉了我一个“答案”。这个“答案”不重要,重要是让我去思考了下面这段话。
基础理论固然重要,但是它并不太适合编程的初学者。进入编程这个行业的人形形色色,我们并不能够去问一个统一的、仿照他人面试模式的面试。就好像我们做编程总在不断地copy一样。在我工作的身边有c++使用20几年的人,我当然尊重他的理论技术和所谓的“经验”,但抱歉,这工作的年限和“经验”并不能够使他比工作2年的人适合解决现实的问题。有很多时候,它是一个应用场景的问题

“杯”装完了,开始写正文。异步是目的,多线程是实现目的的手段。这就是我认为的区别。
至于更深得、更细的、更广度的解答,留给那些大佬们去解答吧。

异步解析数据

在解析数据上,最开始我想的是用new 线程的方式去解决问题。但看UE4的多线程实现起来有点困难,我就在想有没有更好的办法。

于是第一种解决思路,是用得FNonAbandonableTask。它的实现方式请参考我的这篇博客UE4_多线程、异步执行任务里的FAsyncTask

第一种解决问题的思路,代码量有点大,有没有更简单的办法呢。于是继续去搜索学习,找到了一个函数AsyncTask

AsyncTask 数据解析

下面就是一些代码的复制粘贴,不能通用,因为解析的是我的项目json,处理的是我自己定义的结构体数组。

.h文件

 DECLARE_DYNAMIC_DELEGATE_OneParam(FDealHttpDataDelegate,
                                  const TArray<FPOIData>&, poiDataArr);

UCLASS()
class WHOVERSIZESCREEN_API UHttpTest : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
	                            
	UFUNCTION(BlueprintCallable,Category="testAnalysis")
		static void AnalysisPOIDataCall(UVaRestJsonValue* jsonObject, 
	    const FDealHttpDataDelegate& Event);

}
.Cpp
void UHttpTest::AnalysisPOIDataCall(UVaRestJsonValue* jsonObject,const FDealHttpDataDelegate& Event)
{
	// 寻找一个UE4 内置的线程池里空余的线程解析数据
	AsyncTask(ENamedThreads::AnyThread,[Event,jsonObject](){
	   // FPOIData 是自定义的结构体数组
		TArray<FPOIData> poiDataArr;
		auto data_arr = jsonObject->AsArray();
		循环解析数据(){
		************
		数据解析部分
		************
		poiData.ID = ID;
		poiData.POIName = POIName;
	    poiData.LocationX = Location_x;
		poiData.LocationY = Location_y;

		poiDataArr.Add(poiData);
		// 将处理好的数据同步到主线程
	    AsyncTask(ENamedThreads::GameThread,[Event,poiDataArr](){
			Event.ExecuteIfBound(poiDataArr);
	             });
	  });
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4_API_Reference 是一个非常宝贵的资源,它提供了 Unreal Engine 4 引擎的全部 API 详细文档。这些离线文档对开发者来说非常重要,因为它们可以在没有网络连接的情况下提供对 UE4 引擎的完整了解和查询支持。 UE4_API_Reference 全部离线文档包括了对 UE4 的各个模块、类、函数和属性的详细描述和用法示例。开发者可以通过这些文档深入了解各个功能模块的实现原理以及如何正确使用它们。这对于开发者学习 UE4 引擎以及进行游戏开发非常有帮助。 离线文档的好处在于可以在没有网络的环境中使用。开发者不需要依赖互联网来查找关于 UE4 API 的信息,而是可以直接在本地进行搜索和查询。这不仅提高了开发效率,还可以避免由于网络问题导致的信息获取困难。 UE4_API_Reference 全部离线文档的编制工作需要花费大量的时间和精力。文档中的每一个类、函数和属性都需要进行详细描述和示例演示,以便开发者能够更好地理解和使用。这就要求文档编写人员具备广泛的知识和丰富的经验,以确保文档的完整性和准确性。 总之,UE4_API_Reference 全部离线文档对于 UE4 开发者来说是一个非常宝贵的资源。它提供了对 UE4 引擎的全面了解和查询支持,可以帮助开发者更好地学习和使用 UE4 引擎进行游戏开发。同时,它也方便了开发者在没有网络连接的环境中进行开发工作,提高了开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值