正如书中所说,预初始化流程由FEngineLoop::PreInit()所实现
主要处理流程
1,设置路径:当前程序路径,当前工作目录路径,游戏的工程路径
2,设置标准输出:设置GLog系统输出的设备,是输出到命令行还是何处。
3,初始化游戏主线程,是把当前线程当作主线程(因为SetupGameThread()没起作用)
4,初始化随机数系统
5,初始化TaskGraph任务系统,并按照当前平台的核心数量来设置TaskGraph的工作线程数量。同时开启线程池,生成一堆线程。线程数目远远大于核心。
可以看到,我的电脑是8核
现在看看任务线程数
获取逻辑处理器的数量,包括超线程处理器16
现在返回上一级,设定好监视,看看任务线程数
下一步很关键,是如果逻辑处理器大于物理核心,则设置线程数=逻辑处理器数目-2,监视线程变量为14
再考虑到服务器线程,则最大需要26个线程
当然,还需要进一步计算,返回上一层,返回的结果是14,
到最后,加上线程池,是开了47个线程。
6,调用LoadCoreModules(),处理那些UObject
接下来通过预加载其他模块