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

接下来通过预加载其他模块
 



















