同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder ConstructorHelpers::FClassFinder 参考 [UE4 C++ 基础知识]<10>资源的引用 LoadObject 一般用来加载资源对象 UMaterial* M_Cube = LoadObject<UMaterial>(nullptr, TEXT("Material'/…
概述 TaskGraph 系统是UE4一套抽象的异步任务处理系统 TaskGraph 可以看作一种"基于任务的并行编程"设计思想下的实现 通过TaskGraph ,可以创建任意多线程任务, 异步任务, 序列任务, 并行任务等,并可以指定任务顺序, 设置任务间的依赖, 最终形成一个任务图, 该系统按照设定好的依赖关系来分配任务图中的任务到各个线程中执行, 最终执行完整个任务图. TaskGraph适合简单的任务或者想实现有依赖关系的线程,复杂的任务推荐使用 Runnable 或者 Asy…
概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的多线程 std::thread 在GameThread线程之外的其他线程中 不要 spawning / modifying / deleting UObjects / AActors 不要使用定时器 TimerManager 不要使用任何绘制接口,例如 DrawDebugLine,然有可能崩溃 如果…
基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR* TCharString = TEXT("Hello, World!"); // 引擎字符串(TCHAR*) -> ANSI字符串(char*) char* CharString = TCHAR_TO_ANSI(TCharString); // 引擎字符串(TCHAR*) ->…
概念 AsyncTask AsyncTask 系统是一套基于线程池的异步任务处理系统.每创建一个AsyncTas,都会被加入到线程池中进行执行 AsyncTask 泛指 FAsyncTask 和 FAutoDeleteAsyncTask,一般声明为友元函数,FNonAbandonableTask 派生类作为模板 FNonAbandonableTask 是要继承的基类,不可被终止的任务,可以看作是任务执行体的抽象 FAsyncTask 模板类 DoWork() 实现具体任务,自定义类作为模板参数…
所有JAVA线程都必须是Thread或其子类的实例. 继承Thread类创建线程 步骤如下, 定义Thead子类并实现run()方法,run()是线程执行体 创建此子类实例对象,即创建了线程对象 调用线程对象的start()方法来启动线程 下面是一个例子, package threads; public class FirstThread extends Thread { //通过继承thread方式实现多线程 //i不会被多个线程共享 private int i; public void ru…
1.扩展Java.lang.Thread类 1.1.进程和线程的区别: 进程:每个进程都有自己独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1~n个线程. 线程:同一类线程共享代码和数据空间,每一个线程有独立的运行栈和程序计数器,线程切换开销比较小. 进程和线程一样都分为五个阶段:创建.就绪.运行.阻塞.终止. 多进程是指操作系统能同时运行多个任务(程序). 多线程是指在同一个程序中有多个顺序流在执行. 1.2.在Java中要想实现多线程,有两种方法:继承Threa…
概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到通知,并进行相关逻辑处理. 委托,又称代理,本质是一个特殊类的对象,它内部可以储存(一个或多个)函数指针.调用参数和返回值. 蓝图示例 声明委托 委托签名声明可存在于全局范围内.命名空间内.甚至类声明内.此类声明可能不在于函数体内 可以是返回一个值的函数. 最多4个"载荷"变量. 最多8个…
线程组 Java中的ThreadGroup类表示线程组,在创建新线程时,可以通过构造函数Thread(group...)来指定线程组. 线程组具有以下特征 如果没有显式指定线程组,则新线程属于默认线程组,默认情况下,与创建线程所在的组相同 一旦确定了线程所在线程组之后,不允许更改线程组,直到线程死亡 对于线程组ThreadGroup的一个对象,就表示一个线程组,线程组通过ThreadGroup(group...)来初始化, 线程组可以通过interrput(), setDamemon(),set…
join线程 在某个线程中调用其他线程的join()方法,就会使当前线程进入阻塞状态,直到被join线程执行完为止.join方法类似于wait, 通常会在主线程中调用别的线程的join方法,这样可以保证在所有的子线程执行结束之后在主线程中完成一些统一的步骤.下面是一个例子, package threads; public class JoinThread extends Thread { public JoinThread(String name) { super(name); } public…