UE4笔记-进程/线程/网络/IO模块的相关问题记录
吐槽:如果有Qt的开发经验,会发现其实在比较底层编程理念UE4和Qt极其相识.很多类名和用法甚至都是相同的.
Q.创建线程类:
UE4文档没有特别介绍关于线程模块的文章,这里自己简单记录一下,备查.
目前来说UE4的线程模块还是比较简陋的,命名风格像C#和Qt的结合体-_,-
UE4的线程的有两种比较常用的方式:
1.异步编程便捷帮助函数
2.自定义线程类
有复杂线程逻辑、涉及线程通讯的,的用自定义类.简单的用便捷帮助函数即可
说明:
1.异步编程便捷帮助函数:
跟C#的异步编程Task类基本一致.
主要涉及的相关函数和类:
Async | wait |
AsyncThread | wait |
AsyncTask | wait |
AsyncPool | wait |
例子:
wait
2.自定义线程类:
自定义线程类:一般UE4线程主要涉及FRunnableThread类和FRunnable类
FRunnableThread用于管理线程实例(如创建、暂停,销毁等)
FRunnable则是用于实现线程逻辑的具体实现(继承方式)
有三个虚函数和一个纯虚函数
Init() 初始化调用
Stop() //暂停时调用
Exit() 结束时调用 Run() //运行时调用
会按照线程状态依次执行.
用到线程的话,难免会涉及到互斥锁:
UE4的互斥锁是:FCriticalSection类。
FCriticalSection还有与之相关个FScopeLock类
FScopeLock主要是防止线程异常抛出异常死锁的.
最后说明一下,和Qt/C# 一样,只有Run函数体里面的代码和New的变量,属于子线程.而FRunnable类对象本身是属于创建他的线程的
这里列一个我用于IO本地图片的Thread栗子:
.h
class FThread_IO : public FRunnable { public:FThread_IO();~FThread_IO(); public:bool Init() override{ return true; }uint32 Run() override;void Stop() override{} void Exit override();
TArray<FData_LoadTexture2DCommand> arr_waitLoadFile; };
.cpp
FThread_IO::FThread_IO() { }FThread_IO::~FThread_IO() {this->Stop(); }uint32 FThread_IO::Run() {/** 进行本地图片的IO读取处理 线程 */static int i= 1;static int iWidth, iHeight;static UIOHelper *helper = NewObject<UIOHelper>();while (true){FCriticalSection Thread_lock;if (arr_waitLoadFile.Num() > 0){i++;Thread_lock.Lock();bool bvaild = false;auto command = arr_waitLoadFile[0];arr_waitLoadFile.RemoveAt(0);auto tue = helper->LoadTexture2D_FromFile(command.target_UIItem->ImageLocalFilePath, EJoyImageFormats::JPG, bvaild, iWidth, iHeight);command.target_UIItem->SetImage_texture(tue);GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT(" load finished : %d"), arr_waitLoadFile.Num()));Thread_lock.Unlock();}else{FPlatformProcess::Sleep(0.03f);}}return 0; }void FThread_IO::Exit() {GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT(" thread finished")); }
创建线程实例:
FString newThreadName("MyThread");
FThread_IO *thread_ResReader = nullptr;
auto mgr = FRunnableThread::Create(thread_ResReader, newThreadName.GetCharArray().GetData(), 0, TPri_BelowNormal);
Q.创建进程,打开额外程序方法:
FPlatformProcess::CreateProc(TEXT("程序路径");
Q.UE4进程通讯(Pipe):
以Window net form 为例:
wait
转载于:https://www.cnblogs.com/linqing/p/5767359.html
UE4笔记-进程/线程/网络/IO模块的相关问题记录相关推荐
- boost::io模块ios相关的测试程序
boost::io模块ios相关的测试程序 实现功能 C++实现代码 实现功能 boost::io模块ios相关的测试程序 C++实现代码 #include <boost/io/ios_stat ...
- Python爬虫学习笔记-第二课(网络请求模块上)
网络请求模块上 1. 相关概念介绍 1.1 向网站发起请求的方式: 1.2 url-全球统一资源定位符 1.3 User-Agent 用户代理 1.4 referer 1.5 状态码 1.6 抓包工具 ...
- 转:Linux网络IO并行化技术概览
转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...
- Linux网络IO并行化技术概览
转自:http://codinginet.com/articles/view/201605-linux_net_parallel 过去的十年中互联网经历了爆发式的增长,这背后有什么技术平台起了最为关键 ...
- Ethercat远程IO模块接线准则
Ethercat远程IO模块接线准则及注意事项 接线准则 〉所有电气设备的正确接地和接线非常重要,因为这有助于确保实现更佳 系统运行以及为您的应用和总线IO模块提供更好的电噪声防护. 〉在对任何电气设 ...
- 4.19 python 网络编程和操作系统部分(TCP/UDP/操作系统概念/进程/线程/协程) 学习笔记
文章目录 1 网络编程概念 1)基本概念 2)应用-最简单的网络通信 2 TCP协议和UDP协议进阶(网络编程) 1)TCP协议和UDP协议基于socket模块实现 2)粘包现象 3)文件上传和下载代 ...
- Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)
文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...
- 服务端的网络并发,详细解读网络io与线程进程的关系
服务端的网络并发,详细解读网络io与线程进程的关系丨后端开发丨C/C++Linux服务器开发丨网络编程丨epoll的实现丨网络编程 视频讲解如下,点击观看: 服务端的网络并发,详细解读网络io与线程进 ...
- 学习笔记(24):Python网络编程并发编程-进程与线程的区别
立即学习:https://edu.csdn.net/course/play/24458/296438?utm_source=blogtoedu 线程与进程的区别: 1.消耗区别:进程>线程 1) ...
最新文章
- Android 求圆的面积
- python scale()函数_【Python菜鸟进阶大神】Matplotlib数据可视化007:词云
- DexFile类介绍
- 使 Framework 2.0 的程序集不用安装 Framework 就可以运行的工具免费发布了
- treeview调用数据库成树
- 422器件与lvds接收器的区别_SPI、I2C、UART三种串行总线的原理、区别
- 【数据结构与算法】布谷鸟散列表的Java实现
- HTML5 Canvas中绘制线段
- Mac平台使用SnapMotion从视频中提取图像
- 3种云桌面(VDI、IDV、VOI)技术解决方案简介
- PDF怎么转换成PPT?用迅读PDF大师,轻松解决教案问题
- 网页录音之麦克风权限问题
- 如何将mov转换成mp4?详细的步骤分享
- c罩杯尺码_胸罩的A、B、C、D罩杯的尺码分别是多少?
- Linux中级(七)SAMBA文件服务器
- 信息收集(四)之旁站和C段
- Android热更新,Android面试题整理
- 第3次作业-卷积神经网络
- vue+echarts5 实现中国地图
- 操作系统学习笔记: 第二章 操作系统逻辑结构
热门文章
- 关于思考写程序的意义
- 路由器无线桥接 router wireless bridge
- 不要忽视任何小问题!!!一个XML的XPath的问题.....
- 多个网页用一个html,在多个页面使用同一个HTML片段的代码-javascript技巧
- 国内首次 Istio Meetup 来了,主流社区专家邀你来共聊
- 如何实现Java类隔离加载?
- asp mysql连接已重置,mysql-检查经典ASP中的连接是否正常
- 成为“能打”的二次元游戏《明日方舟》做对了什么?
- 《幽灵行者》:近期最酷炫的赛博朋克游戏之一
- 游戏行业的人工智能设计(二):路径搜寻和感知