UE4_异步_数据处理(Json)

2023-11-07

如果一个数字城市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);
	             });
	  });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4_异步_数据处理(Json) 的相关文章

  • Qt+SDL播放YUV视频文件

    播放一个yuv420p格式的文件 yuv的格式与rgb格式的存储方式不同 yuv数据是 yyyyyyyy uu vv 的存储 rgb是rgba rgba rgba 存储 同样一帧图像 yuv420会比rgb数据更小 读取时就要注意数据存储格
  • 解决UE4启动出现UE4Editor.exe-无法找到dll入口的弹窗

    UE4编辑器启动 一开始遇到的问题如下 上网找问题得到的解答都是在cmd下利用regsvr32 exe注册该dll到注册表 但是也提示报错 上网搜了一下 得知原因是生成该dll的源码没有实现 DllRegisterServer和DllUne
  • ue4 DerivedDataCache报错

    启动ue4时报错 报错堆栈如下 从堆栈可以看出是DerivedDataCache报错 从堆栈的CachedDataProbablyExists函数更可以看出是在判断cache是否存在 故而想到删除项目目录下DerivedDataCache中
  • UE4、5不让贴花影响Mesh

    如果不想让贴花影响某些在移动中的物体穿过它也会受到影响 例如人 车之类的 可以把mesh里的Receives Decals选项去掉
  • UE4 材质 生成随机数

    参考之前的文章中关于随机数和noize的 https papalqi cn 201707 cid 558 html
  • 基于个人开发的C++MySQL插件使用UE4蓝图连接MySQL数据库

    关于UE4连接数据库 其实很简单 本质上就是使用c 来建立DB操作 再通过封装成蓝图可调用的函数即可 当然一般网络游戏是不需要在蓝图中连接数据库的 因为db操作放在客户端来做是不安全 也是不合理的 试想一下 我如果把你的游戏客户端破解了 是
  • UE TSubclassOf

    定义 TSubclassOf
  • UE4 C++ 类的4种引用类型,和异步加载资产

    UE4 C 类的4种引用类型 和异步加载资产 4种引用类型 对象引用 引用 World 的实例对象 就是直接定义 UPROPERTY EditAnywhere BlueprintReadOnly Category My 对象引用 UWorl
  • UE 材质学习

    值材质三原素 材质 材料 肌理 纹络 or 纹理 图案 Material Texture Pattern UE5中对应材质的 三原素 的内容 材质 Metallic 金属感 Roughness 粗糙度 Specular 高光 镜面 肌理 N
  • 【UE4】多视角相机捕获图像如何同屏拼接在一起

    前段时间有个Demo移植的需求 需要把实时裸眼3D多视角立体显示的Unity版本移植到UE4 主要包含后处理Shader 相机矩阵变换 多视角画面平铺拼接三大部分 10 10 多视角相机捕获图拼接效果 对现有的多窗口显示方法进行查阅后 发现
  • UE4 蓝图通信:接口调用

    UE4学习心得 蓝图间信息通信的几种方法 UE4的接口调用技术有点简单粗暴 而且主要体现在主蓝图对子蓝图的信息通信 在内容浏览器中添加一个蓝图接口 命名为TestInterface 双击打开接口 直接使用其创建时自带的一个接口函数 将其重命
  • 专题详解-5G接入控制(1)

    相关文章会在公众号同步更新 公众号 5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理 保证更新内容的准确性 避免通过二手 甚至多手的资料 以讹传讹误导网友 最近工作中遇到了一些5G专网接入限制的问题 以前没仔细研究 借着解决这
  • 11月5日 Unreal Engine Rider 代码使用记录

    11月5日的代码使用记录 TSubclassOf UPROPERTY EditAnywhere TSubclassOf
  • UE4 技能系统(GAS插件的使用) 01--Build Basic Classes 创建基础类

    翻译自Udemy的视频课程introduction to unreal engine 4 ability system Build Basic Classes 创建基础类 1 创建工程和人物设置 01 创建Git仓库 使用UE4 22 VS
  • 【待续】【UE4笔记】 L10地形编辑器

    一 地形界面 包含了管理 雕刻和描画功能 1 创建新项 2 雕刻 改变地形高度 顶点位置 3 描画 分层地形材质 二 编辑样条 调节参数 添加材质 效果如下
  • ue4 蓝图通信的几种方式

    一 设置公有变量 完成通信 1 蓝图类Door bp中声明变量NewVar 1 为公有 确定好变量类型 编译 2 关卡视口中选中这个蓝图类Door bp的实例 世界大纲视图下的细节面板中 默认下出现公有变量名称NewVar 1 用吸管吸取关
  • UE4_插件开发引用第三方库编译报错[Error C4668]

    C Program Files x86 Windows Kits 10 include 10 0 16299 0 um winioctl h 7542 error C4668 WIN32 WINNT WIN10 TH2 is not def
  • ue4_timeline时间轴

    1 给一个cube添加蓝图 需要修改的是z轴方向移动位置 将z轴传入时间轴 时间轴蓝图如下 z轴时间轴修改为 第一个节点 time 0 value 300 物体的z轴初始位置 第二个节点 time 1 value 600 z轴移动300个单
  • UE4 射线检测案例(C++)

    UE4 射线检测 C 开发场景 玩家 C 开发的 武器 C 射线检测函数 蓝图 C 效果 制作流程 添加开火按键映射 新建一个继承ACharacter的C 用蓝图继承刚刚新建的C 然后设置好游戏模式 我 这是是 用了一个枚举 其实你直接调用
  • UE4(Unreal Engine4)在蒙太奇动画中添加音频轨道通知

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 遇到的问题 二 操作步骤 前言 UE4 Unreal Engine4 在蒙太奇动画中添加音频轨道通知 我们想在某一帧动画中添加声音 比如我们想在动画的第13帧这里添加音效 一 遇到

随机推荐

  • MMSegmentation训练自己的分割数据集

    首先确保在服务器上正常安装了MMSeg 注意安装完还需建立与自己的数据集之间的软连接 官方安装教程如下 https github com open mmlab mmsegmentation blob master docs get star
  • Python flask-restful 框架讲解

    1 简介 Django 和 Flask 一直都是 Python 开发 Web 的首选 而 Flask 的微内核更适用于现在的云原生微服务框架 但是 Flask 只是一个微型的 Web 引擎 所以我们需要扩展 Flask 使其发挥出更强悍的功
  • RedisTemplate和StringRedisTemplate的区别

    RedisTemplate和StringRedisTemplate的区别 1 两者的关系是StringRedisTemplate继承RedisTemplate 2 两者的数据是不共通的 也就是说StringRedisTemplate只能管理
  • 索引构造与信息检索:让 ChatGPT 成为 Selenium 问答助手

    这是chatgpt为我生成的3个标题 我选了第3个 利用 Langchain 和 GPT 实现 Selenium 机器人自动问答 向量化存储和检索 如何用相似度搜索匹配 Selenium 知识 索引构造与信息检索 让 ChatGPT 成为
  • open3d python版本安装及安装过程中遇到的问题

    本文介绍一下我在安装open3d包过程中遇到的问题 pip安装 pip install open3d pip install open3d i https pypi tuna tsinghua edu cn simple or pip in
  • npm镜像设置

    查看镜像列表 npm isntall g nrm nrm ls 根据镜像列表地址来设置镜像 例如 npm config set registry https registry npmjs org 查看镜像 npm config get re
  • 高通QCM6125的LK部分(uefi/xbl)编译

    高通在QCM6125安卓10 0加入了UEFI 以前的lk相关代码移到了boot images QcomPkg路径下 编译方式和之前也不同了 编译环境 编译时错误提示 需要工具在这个路径 pkg qct software llvm rele
  • KNX协议入门

    KNX协议入门 转自 https wenku baidu com view 65b0a25a55270722182ef706 html 如有侵权 请联系qq 2453419889 我将立即删除 一 KNX技术简介 KNX通过一条总线将各个分
  • Dapper功能讲解

    简述 适用特性 使用Dapper流程 代码示例 简述 Dapper是一个轻量级的ORM工具 ORM框架的核心思想是对象关系映射 ORM是将表与表之间的操作 映射成对象和对象之间的操作 就是通过操作实体类来达到操作表的目的 从数据库提取的数据
  • [637]文件或目录损坏且无法读取CHKDSK修复方法

    文件或目录损坏且无法读取 不要太担心是出现了磁盘坏道 也许只是小小的存储问题 解决方法很简单 用chsdsk命令即可 方法如下 开始 运行 输入cmd 输入chkdsk 盘符 f 例如 chkdsk c f 等命令运行完即可 注意 冒号后面
  • matlab中size()的用法

    size A 设有一矩阵为A 则size A 返回的是一行向量 该行向量的第一个元素时矩阵的行数 第二个元素是矩阵的列数 size A 1 获取矩阵A的行数 size A 2 获取矩阵A的列数
  • 数学的1000+篇文章总结

    数学的1000 篇文章总结 本文收集和总结了有关数学的1000 篇文章 由于篇幅有限只能总结近期的内容 想了解更多内容可以访问 http www ai2news com 其分享了有关AI的论文 文章 图书 query 第13章 爱因斯坦 量
  • C#实现程序的版本升级更新

    我们做了程序 不免会有版本升级 这就需要程序有自动版本升级的功能 那么看看我是如何实现程序自动更新的 直接上代码 using System using System Collections Generic using System Text
  • 数学建模学习2论文排版

    如何写论文 一 四点注意事项 一 标题与正文层次分明 二 正文排版紧凑 三 表格与图片格式 四 公式编辑 二 如何写标题 一 要求 二 格式及示例 三 如何写摘要 一 要求 二 格式及示例 1 总体格式图 2 开头段模板 3 中间段模板 4
  • 机器学习笔记-感知机对偶形式

    文章目录 前言 一 感知机对偶形式 二 感知机对偶形式的实现 总结 前言 感知机模型是有两种形式的 上一篇文章中详细学习了感知机的原始形式数学模型 我们知道 感知机应该还有对偶形式 这篇文章就来记录一下感知机对偶形式的的数学模型 一 感知机
  • Object.entries()

    Object entries 方法返回一个给定对象自身可枚举属性的键值对数组 其排列与使用 for in 循环遍历该对象时返回的顺序一致 区别在于 for in 循环还会枚举原型链中的属性 语法 Object entries obj 参数
  • 构造函数与析构函数的保护权限

    通常我们如果希望对象只在堆上创建 我们会将析构函数定义为protect或private类型 这种情况下我们还要添加一个函数来析构对象 因为此时在类外部无法使用delete释放对象 因为析构函数被保护 那么究竟为什么限制析构函数的访问权限可以
  • 下载网页视频简单的办法之一

    下载网页视频简单的办法之一 下载小网站网页视频的简单办法之一 添加插件 使用方法 局限性 下载小网站网页视频的简单办法之一 经常在小网站 比如91xxx youxxxx 上看到喜欢的小视频 想要收藏 你懂的 无赖很多都要VIP才给下载 以前
  • kali_linux (install版)移动硬盘(物理机)安装记录

    作者 瓴 时间 2023 04 23 kali linux install版 移动硬盘 物理机 安装问题记录 1 安装介绍 1 1 相关参数 2 kali 安装 2 1 制作系统启动U盘 2 2 移动硬盘分区 2 2 系统安装 2 3 引导
  • UE4_异步_数据处理(Json)

    如果一个数字城市demo 需要将第三方海量的数据进行处理展示 将数据的处理放在GameThread 上显然是不合理 这个时候需要用多线程解析数据 防止游戏线程的阻塞 关于异步和多线程 前两天面试被别人问到一个问题 异步和多线程的区别 面试的