吐槽:如果有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模块的相关问题记录相关推荐

  1. boost::io模块ios相关的测试程序

    boost::io模块ios相关的测试程序 实现功能 C++实现代码 实现功能 boost::io模块ios相关的测试程序 C++实现代码 #include <boost/io/ios_stat ...

  2. Python爬虫学习笔记-第二课(网络请求模块上)

    网络请求模块上 1. 相关概念介绍 1.1 向网站发起请求的方式: 1.2 url-全球统一资源定位符 1.3 User-Agent 用户代理 1.4 referer 1.5 状态码 1.6 抓包工具 ...

  3. 转:Linux网络IO并行化技术概览

    转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...

  4. Linux网络IO并行化技术概览

    转自:http://codinginet.com/articles/view/201605-linux_net_parallel 过去的十年中互联网经历了爆发式的增长,这背后有什么技术平台起了最为关键 ...

  5. Ethercat远程IO模块接线准则

    Ethercat远程IO模块接线准则及注意事项 接线准则 〉所有电气设备的正确接地和接线非常重要,因为这有助于确保实现更佳 系统运行以及为您的应用和总线IO模块提供更好的电噪声防护. 〉在对任何电气设 ...

  6. 4.19 python 网络编程和操作系统部分(TCP/UDP/操作系统概念/进程/线程/协程) 学习笔记

    文章目录 1 网络编程概念 1)基本概念 2)应用-最简单的网络通信 2 TCP协议和UDP协议进阶(网络编程) 1)TCP协议和UDP协议基于socket模块实现 2)粘包现象 3)文件上传和下载代 ...

  7. Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...

  8. 服务端的网络并发,详细解读网络io与线程进程的关系

    服务端的网络并发,详细解读网络io与线程进程的关系丨后端开发丨C/C++Linux服务器开发丨网络编程丨epoll的实现丨网络编程 视频讲解如下,点击观看: 服务端的网络并发,详细解读网络io与线程进 ...

  9. 学习笔记(24):Python网络编程并发编程-进程与线程的区别

    立即学习:https://edu.csdn.net/course/play/24458/296438?utm_source=blogtoedu 线程与进程的区别: 1.消耗区别:进程>线程 1) ...

最新文章

  1. Android 求圆的面积
  2. python scale()函数_【Python菜鸟进阶大神】Matplotlib数据可视化007:词云
  3. DexFile类介绍
  4. 使 Framework 2.0 的程序集不用安装 Framework 就可以运行的工具免费发布了
  5. treeview调用数据库成树
  6. 422器件与lvds接收器的区别_SPI、I2C、UART三种串行总线的原理、区别
  7. 【数据结构与算法】布谷鸟散列表的Java实现
  8. HTML5 Canvas中绘制线段
  9. Mac平台使用SnapMotion从视频中提取图像
  10. 3种云桌面(VDI、IDV、VOI)技术解决方案简介
  11. PDF怎么转换成PPT?用迅读PDF大师,轻松解决教案问题
  12. 网页录音之麦克风权限问题
  13. 如何将mov转换成mp4?详细的步骤分享
  14. c罩杯尺码_胸罩的A、B、C、D罩杯的尺码分别是多少?
  15. Linux中级(七)SAMBA文件服务器
  16. 信息收集(四)之旁站和C段
  17. Android热更新,Android面试题整理
  18. 第3次作业-卷积神经网络
  19. vue+echarts5 实现中国地图
  20. 操作系统学习笔记: 第二章 操作系统逻辑结构

热门文章

  1. 关于思考写程序的意义
  2. 路由器无线桥接 router wireless bridge
  3. 不要忽视任何小问题!!!一个XML的XPath的问题.....
  4. 多个网页用一个html,在多个页面使用同一个HTML片段的代码-javascript技巧
  5. 国内首次 Istio Meetup 来了,主流社区专家邀你来共聊
  6. 如何实现Java类隔离加载?
  7. asp mysql连接已重置,mysql-检查经典ASP中的连接是否正常
  8. 成为“能打”的二次元游戏《明日方舟》做对了什么?
  9. 《幽灵行者》:近期最酷炫的赛博朋克游戏之一
  10. 游戏行业的人工智能设计(二):路径搜寻和感知