![](https://img-blog.csdnimg.cn/492b98a083494f65a05fcfa7921580a0.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
UE4/5C++多线程插件制作
文章平均质量分 88
UE4/5C++多线程相关知识,建议看过笔者专栏下的c++多线程或者理解多线程理念后在来看相关UE4/5C++多线程的知识,你应该先了解ue4/5中的一些基本的线程概念和理解,该专栏将会教你在制作一款UE4/5c++的多线程插件。
多方通行8
啥都会一点的卷人,因为都会一点,所以发的东西也不规律,有心情就发东西,没心情就学习
我是卷心菜,越卷越菜。
展开
-
UE4/5C++多线程插件制作(二十一、使用)
相关的插件制作在上一节已经完成了。具体的使用方式在第0章已经写了,get之后去绑定即可。而后笔者做了一个接口,具体的绑定方式也就在这个接口里面。原创 2023-08-14 09:47:09 · 634 阅读 · 2 评论 -
UE4/5C++多线程插件制作(二十、源码)
笔者将一些的细节,以及头文件,还有没法使用的宏进行了一定程度上的修改,如果是自己写的,可以一一对照看看,如果是懒人,可以直接复制粘贴源码即可:添加了没用的蓝图接口,在cpp中使用,效果比较好,可以封装到蓝图,笔者这里简单的做了一下,有需要可以自己去制作:首先是头文件:看情况决定你的环境配置,甚至平台是Windows还是安卓,或者是其他的,笔者的电脑只有这两个配置,所以就只有这样:MultiThreadPlugins.Build.csMultiThreadPlugins.hMTPPl原创 2023-07-29 22:48:51 · 634 阅读 · 3 评论 -
UE4/5C++多线程插件制作(十九、异步资源读取封装,细节修改)
普遍要修改的地方是重载操作符的位置,以及头文件的顺序问题,一些文件报错【前置任务完成的宏发生报错,笔者尝试进行解决,却失败了】下一章,笔者将发出可以打包的全部源码【请复制粘贴(文件上传会导致下载可能需要积分或者vip情况)】。原创 2023-07-29 16:36:05 · 471 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十八、Graph线程封装,以及宏的设置)
在UE5中,是一种特定的线程,用于处理游戏引擎中的。负责解释蓝图和行为树的逻辑,执行其中的节点、连接和操作,并根据其定义的行为来驱动游戏的运行。它负责处理输入事件、计算脚本之间的依赖关系,以及执行与游戏中其他系统的交互。Graph线程还负责管理蓝图和行为树的状态,例如变量的更新、条件的评估和事件的触发。使用的可以提高脚本系统的。由于它是一个独立的线程,可以与游戏的工作,这样就可以在。原创 2023-07-25 22:20:07 · 460 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十七、封装协程管理)
用于创建委托并将其绑定到当前实例。这样可以以更加灵活的方式来处理绑定,并支持多种不同的委托类型。原创 2023-07-25 18:21:02 · 409 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十六、Coroutines协程封装)
我们要对协程继续封装制作:协程是一种计算机程序组件,它允许在某个位置暂停执行,然后在稍后的时间点恢复执行。与传统的函数调用不同,协程可以被多次调用并且能够保留其内部状态,从而允许程序在执行到一定点时暂停,执行其他任务,然后再返回协程继续执行。在传统的线程或进程模型中,控制权在不同的线程或进程之间切换,而协程是在同一个线程中执行,使用一个调度器来控制执行的协程。协程提供了更加轻量级和高效的计算资源利用方式,因为它们不需要线程间的切换开销。协程的一个重要特点是可以进行非阻塞的异步操作。原创 2023-07-25 15:16:17 · 694 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十五、将模板统一,修改统一后的其他类,修改继承,修改返回类型等)
随着我们一点点的创建,可以发现模板太多了,并且有一些模板的功能甚至是重复的。尝试打包,成功,该章结束。原创 2023-07-25 12:23:12 · 377 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十四、MTPAbandonable)
定义了一个宏,用于创建一个FMTPAbandonable类型的自动删除的异步任务,并在后台线程中执行。它接受一个FSimpleDelegate类型的ThreadDelegate参数,表示要执行的操作。该宏会返回一个新创建的FAutoDeleteAsyncTask对象,并调用StartBackgroundTask()方法来启动后台任务。定义了一个宏,用于创建一个异步任务,并指定一个UObject对象和其成员函数以及可变参数来执行。原创 2023-07-25 10:12:30 · 767 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十三、优化,bug,尝试打包【尚未完成插件封装,初次测试】)
首先我们准备一个跨平台使用的头文件,在ue内部有很多关于跨平台的头文件,我们只需要在自己的头文件中,根据不同的平台来决定包含哪些头文件即可。然后包含这个头文件,这个头文件里面定义了通用平台进程相关的功能和操作,而后我们就可以根据#if来判断是什么平台来包含不同的头文件。原创 2023-07-24 21:50:53 · 764 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十二、任务管理,优化ThreadManage,相关代码)
笔者才发现有bug,找了1个小时,发现是一个类底下的;写到这里,笔者突然发现,要删除的东西。实例,并将其加入到线程任务列表中。这样,当我们需要使用多线程执行任务时,就可以通过这个。这是为了确保在销毁实例时,所有线程都可以正常退出并释放资源。作为参数,用于指定要创建的线程数量。在该函数中,我们根据。函数,这是一个非常重要的函数,它将在每一帧被调用,用于。当找到一个挂起的线程后,我们将其赋值给。在这个函数中,我们首先定义了一个名为。,如果不为空,我们可以从队列中取出一个。这个tick,在上面已经创建了,所以。原创 2023-07-22 23:17:04 · 244 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十一、管理封装)
在第十章中,我们完成了对MTPThreadInterface.h的接口封装,接下来我们将对两个管理文件进行封装:MTPThreadAgendyManage.hJoin():该函数用于同步操作,用于等待一个线程的执行完成。它接受一个FThreadHandle类型的参数Handle,表示要等待的线程。返回值为bool,表示操作是否成功。Detach():该函数用于异步操作,用于将一个线程分离,使其在后台继续执行。它接受一个FThreadHandle类型的参数Handle,表示要分离的线程。返回原创 2023-07-22 17:24:20 · 357 阅读 · 0 评论 -
UE4/5C++多线程插件制作(十、接口类和代理容器类的制作)
该文件提供了一个接口类和一个代理容器类。类是一个基类,它包含了一个互斥锁,用于保护多线程操作的互斥访问。类继承自和,作为代理容器。它重载了运算符来管理代理任务的创建、分配和查询。使用互斥锁确保多线程操作的安全性。原创 2023-07-21 22:29:14 · 346 阅读 · 0 评论 -
UE4/5C++多线程插件制作(九、将FEvent封装为信号量)
通过上一章,我们可以发现随着我们的多线程插件的制作,我们的项目虽然一次次的在进行局部的优化,但仍然是十分臃肿的。原创 2023-07-20 03:30:00 · 213 阅读 · 0 评论 -
UE4/5C++多线程插件制作(八、通过获取最大线程数制作任务队列)
我们需要制作一个自动化的任务列表,而这个时候,我们就需要知道我们当前使用的设备是支持多少个线程去使用的。而ue内部是有这么两个函数是可以实现的,分别是:FPlatformMisc::NumberOfWorkerThreadsToSpawn()和FPlatformMisc::NumberOfCoresIncludingHyperthreads()。FPlatformMisc::NumberOfWorkerThreadsToSpawn()这个函数返回的是引擎在启动时自动创建的worker线程数的最大值原创 2023-07-19 04:30:00 · 317 阅读 · 0 评论 -
UE4/5C++多线程插件制作(七、绑定和创建启动线程是否挂起与代码再优化)
现在因为我们的MTPManage支持Lambda后,我们要去RTPAgendy中将Run中的删除。而在删除之后我们发现甚至可以将整个接口中的关于Lambda的函数删除,所以在RTPAgendy头文件中,我们直接删除bExecute,来到接口直接将进行删除。中的相关bExecute都进行删除即可。然后到MTPManage中,将删除。【除了BindLambda以外的相关于Lambda的都可以删除,因为我们打算是使用ue中的lambda函数所有的关于bExecute全部删除!!!原创 2023-07-18 22:57:21 · 336 阅读 · 0 评论 -
UE4/5C++多线程插件制作(六、添加同步线程接口,对MTPManage进行加锁,确保线程安全,到目前为止的全部代码)
作用域锁是指这个锁在离开作用域后就会自动析构。为什么要在。原创 2023-07-18 04:00:00 · 210 阅读 · 0 评论 -
UE4/5C++多线程插件制作(五、删除线程,全面小优化)
通过遍历,将线程池里面所有的线程等待并完成,确定所有的线程完成之后,将线程池进行置空,在置空的时候其会自动调用析构函数,这样就可以完成删除线程。遍历整个线程池,查看是否有线程被挂起,如果有,则查看被挂起的线程句柄和传入的句柄是否一致,如果一致则直接唤醒线程,返回。单个线程的清除和销毁全部线程差不多,不一样的是我们需要的是线程池里面的线程索引,我们用。这原本是打算用来进行挂起的一个函数,但随着我们进一步的对插件的封装,完善,以及。,然后对线程池进行遍历,查找有没有空闲的线程,有则返回。原创 2023-07-17 22:15:31 · 471 阅读 · 0 评论 -
UE4/5C++多线程插件制作(四、线程绑定执行机制的更改)
之后考虑到如果线程池里面没有闲置的线程的时候,或者其他特殊情况的时候,那么句柄就是一个空的,是不存在的,所以在这里我们进行了进一步的判断,如果句柄是空的,我们就直接创建并绑定线程。开发一个强大的线程管理机制是非常重要的,无论是在什么程序中,通过使用这个机制,我们可以确保我们的应用程序的线程安全和稳定性,并避免一些常见的线程问题,比如死锁和资源争用。绑定的函数和之前一样,这里我们先创建了一个句柄,然后通过迭代的方式去遍历线程池,先判断是否有闲置的线程,有则通过代理进行绑定。中的执行线程的地方关闭,那就是在。原创 2023-07-17 04:30:00 · 395 阅读 · 0 评论 -
UE4/5C++多线程插件制作(三、线程池的封装)
在这一章中,我们将要封装一个线程池,或者说是封装一个线程池管理。原创 2023-07-16 22:08:45 · 560 阅读 · 0 评论 -
UE4/5C++多线程插件制作(二、简单的对Runnable进行封装)
上一章中,我们制作了一些基础的准备,包括类型,接口等等,现在我们继续去进行制作,今天我们将会简单的对RTPAgendy文件,即我们要将FRunnable进行封装。制作流程:FThreadRunnable首先是关于RTPAgendy.h的头文件,现在我们还什么都没有写,第一步很简单,为什么要进行这个Runnable的封装,我们在前一章中已经讲过,该作用是用于在特殊情况使用的,所以我们要继承一下原来的FRunnable:class FThreadRunnable :public FRunnabl原创 2023-07-16 17:22:54 · 583 阅读 · 0 评论 -
UE4/5C++多线程插件制作(一、介绍原理与需要了解的相关知识,准备开始制作多线程插件)
如果订阅了该专栏,那么我相信你们都是对c++多线程方面已经有了相应的了解的,所以接下来笔者将开始讲述关于ue4/5c++多线程的相关知识。原创 2023-07-15 23:04:34 · 695 阅读 · 1 评论 -
UE4/5C++多线程插件制作(0.简介)
插件效果更多的是在cpp中去使用这个插件,而不是在蓝图中,所以对于蓝图接口并没有进行一个精致的制作【有一个蓝图接口,但因为不是专门去制作的,所以这个蓝图接口实际上只能用于简单的异步加载来做一些gameinstance之类的事情,如果有需要,可以自行在里面进行添加相对应的函数。】插件使用如何使用这个插件,对此我在MTPLevelSubsystemBPInterface.h的底下做了注释,里面的其实是一个pawn类,只需要将里面的相应函数复制到pawn类就可以知道这是如何使用的了,不过还是简单的进行讲解原创 2023-07-29 23:27:10 · 991 阅读 · 0 评论