Linux平台下UE的代码启动流程

news2024/9/25 21:31:16

文章目录

  • 概述
    • main(主函数)
    • CommonUnixMain(unix平台通用函数)
    • GuardedMain(引擎主函数)
    • AppExitCallback(退出调用)
  • 小结

概述

本篇主要写下Linux下UE的启动流程,主要还是代码流程。从最开始的main函数,到最后的引擎层的启动退出,至于中间加载UE引擎各个插件的内容,不是这篇的主要内容。

main(主函数)

从简单的hello,world到一个复杂的程序的拆解过程,都是从main函数开始。接下来看看main函数。
runtime
launchlinux.cpp

先找到runtime,然后在招的Launch下边各个平台的启动。要找各个平台的main,都在对应的文件夹下。这里以linux为例。

CommonUnixMain(unix平台通用函数)

在这里插入图片描述
可以看到,main函数里,有一个CommonUnixMain函数;

CommonUnixMain

有几个参数,第一个参数argc,是第二个参数argv数组的数量;第二个参数argv,是一个数组;第三个参数realMain,是下一个调用的一系列函数的函数链;第四个参数,是一个退出回调。

这些内容,看下英文注释,基本上可以看明白;接下来看下具体的函数内容。函数内容是根据参数来的,从第一个,第二个参数开始吧;

argc
这段代码把argc,argv给解析出来;主要是argv,然后存到一个变量GSavedCommandLine里;

在看下realMain,
RealMain
如上图,上边处理完的argv的参数,也就是命令行参数,作为参数给第三个函数GuardedMain。

GuardedMain(引擎主函数)

来看看这个函数,其实这个函数内部主要封装了几个函数,如下:

  1. EnginePreInit
  2. SlowTask.EnterProgressFrame(80);
  3. SlowTask.EnterProgressFrame(20);
  4. EditorInit/EngineInit
  5. EngineTick
  6. EditorExit/EngineExit

其实,就是引擎预初始化(EnginePreInit),初始化(EditorInit/EngineInit),循环(EngineTick),退出(EditorExit/EngineExit)。

初始化
如上图,是预初始化,还有引擎/编辑器初始化的代码;可以看到,在预初始化的时候,有个命令行参数,也就是说,有关命令行参数的操作,大概率都是在这里处理的;具体逻辑不是本篇的重点,以后有空看看。

循环,退出代码
引擎退出

这个是循环,退出的代码。第一个里边的退出是编辑器退出,第二个里边的是引擎的退出。退出肯定会有大批的流程,不是一两句话说明白的。不细说。

AppExitCallback(退出调用)

退出
这个函数比较简单,主要是退出函数,回调到LaunchUnix_FEngineLoop_AppExit函数;这个函数的调用,如下图:

退出
这个函数最终会调用到相应平台的退出函数。具体实现,看一下就知道了。跨平台的内容,对应的代码理顺了,没有那么难。

小结

本篇主要写了linux平台下的ue的代码调用流程。主要从主函数(main),平台通用函数(CommonUnixMain),引擎主函数(GuardedMain),退出调用(AppExitCallback)这几个方面写的。看完这篇,相信没看过或者理过这块的人思路应该清晰了不少。按照这个顺序,去理解其他平台,应该也会轻松很多。但是,毕竟还是涉及到一些C++的基础,这块,可以参考学习学习。至于其他的流程,有空可以自己理理。OK,这篇结束!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

显示器熄屏待机时,音响持续发出USB插入和拔出的声音的解决方法!

电脑电源计划设置经过一段时间自动关闭显示屏,当显示屏关闭的时候,连接电脑主机的音响会每隔大约5秒左右持续播放USB插入和拔出的提示声,非常烦人。 网上搜索的解决方法是在显示器的设置中将输入源的【自动输入】关闭即可。原因是显示器信号被…

从汇编层看64位程序运行——C++的Copy Elision(复制省略)技术的实现

大纲 Copy Elision的应用场景返回值优化(Return Value Optimization, RVO)命名返回值优化(Named Return Value Optimization, NRVO)C11及以后的移动语义 禁用Copy Elision(复制省略)Copy Elision&#xff0…

Redis 的 主从复制

目录 1 Redis 主从复制介绍 2 Redis主从复制原理 2.1 主从同步过程 3 Redis实现主从复制 3.1 环境配置 3.2 修改各节点的配置文件 3.2.1 MASTER 3.2.2 SLAVE 3.3.3 重启Redis 3.3 查看是否实现了主从复制 3.3.1 MASTER 3.3.2 SLAVE 3.3.3 Redis 常用操作 3.3.4 数据添加查看…

AD9162数据链路lanes与FPGA高速BANK引脚交叉相连导致vivado编译失败

问题概述 对AD9162芯片进行功能开发时,发现AD9162的链路lanes与FPGA的高速BANK引脚存在交叉相连的情况,按照实际的引脚连接关系进行约束后,vivado编译失败。 问题阐述及原因分析 问题详情阐述 板卡对AD9162芯片进行功能开发时,发…

高并发业务下的库存扣减技术方案设计

扣减库存需要查询库存是否足够: 足够就占用库存不够则返回库存不足(这里不区分库存可用、占用、已消耗等状态,统一成扣减库存数量,简化场景) 并发场景,若 查询库存和扣减库存不具备原子性,就可能超卖&…

node.js使用express框架实现api接口开发(从零开始,超简单可直接复制)

目录 一、效果图 二、实现 1、引入express框架依赖 2、 新建启动文件(/server/index.js) 3、新建接口函数文件(/server/router.js) 一、效果图 二、实现 1、引入express框架依赖 在项目文件夹根目录下,打开控制台…

ShenNiusModularity:一款基于 .NET Core 框架研发的自媒体内容管理系统

项目介绍 ShenNiusModularity是一款基于 .NET Core 框架研发的、开源、免费的自媒体内容管理系统。项目秉承大道至简的原则开发,坚持业务模块最低复杂度复用,代码方面追求简单、高效、实用。适合小白入门进阶,同样适用老手上路干活。 项目包…

Python青少年简明教程:字符串

Python青少年简明教程:字符串 字符串(string)是用于表示文本的数据类型。它是不可变的序列类型,即一旦创建,字符串中的字符就无法改变。 下面对Python中字符串的详细介绍,包括字符串的创建、操作和常见方法…

MySQL 集群技术全攻略:从搭建到优化(下)

目录 四.mysql高可用之组复制 (MGR) 1.组复制流程 2.组复制单主和多主模式 3.实现mysql组复制 五.mysql-router(mysql路由) 1.Mysql route的部署方式 六.mysql高可用之MHA 1.MHA架构图 2.为什么要用MHA? 3.MHA 的组成 4.什么是 MH…

网络 (tcp)

客户端 /*************************************************************************> File Name: client.c> Author: yas> Mail: rage_yashotmail.com> Created Time: Thu 22 Aug 2024 04:04:26 PM CST******************************************************…

从零开始学习SLAM六(单应矩阵)

本文参考:计算机视觉life 概念 单应性(homography)是指两个平面之间的一种保直线性的对应关系。如果一个平面上的点集经过某种变换后,在另一个平面上形成的新点集仍然保持原来的线性特性(如共线的点仍然共线&#xf…

一起搭WPF界面之View的简单设计一

一起搭WPF界面之View的简单设计一 1 前言2 界面预期设想3 基础的实现步骤3.1 界面划分3.1.1 基础框架代码:3.1.2 实现效果 4 界面花样设计4.1 花样设计4.2 界面源代码4.3 错误提醒4.3.1 错误14.3.2 错误2 总结 1 前言 基于上一篇的window、Gird、Border的简单介绍&…

XSS LABS - Level 13 过关思路

关注这个靶场的其他相关笔记:XSS - LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 进入靶场,老样子,右击,查看页面源码,找找不同: 可以看到,本关又多了一个新字段 t_cook&#xf…

关于 Vue/React 的 cli 中运用 webpack 打包的原理简单解析

webpack、webpack-cli的打包 关于 webpack 对前端工程中进行资源文件进行打包处理的过程中,运用到的核心插件主要是 webpack 和 webpack-cli,在 react 和 vue 对于打包各自工程中的 cli 则是进行了自定义的构建,专门用于项目打包的 …

【MySQL-25】万字总结<锁>——(全局锁&行级锁&表级锁)【共享锁,排他锁】【间隙锁,临键锁】【表锁,元数据锁,意向锁】

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

Bytebase 2.22.2 - 允许在工作空间为群组分配角色

🚀 新功能 允许在工作空间给群组分配角色。 支持禁用邮箱密码登录,仅允许 SSO 登录的设置项。 新增 Postgres SQL 审核规则:禁止在列上设置会变化的默认值。 🔔 重大变更 下线项目内的变更历史页面;所有变更历史仍可…

Phoenix

Apache Phoenix 是一个开源的关系数据库层,运行在 Apache HBase 之上,旨在为 HBase 提供 SQL 查询能力和优化的存储引擎。它允许用户使用标准的 SQL 查询和事务语义来管理 HBase 中的数据,并且可以与现有的大数据生态系统无缝集成。Phoenix 通…

IOS开发 铃声制作(库乐队)

IOS开发,实现铃声制作功能。 在IOS端,要设置铃声都是通过库乐队来制作的。 先看一下库乐队中铃声的文件结构。下面是弄的一个示例的文件,文件信息如下: 我们右击文件,点击显示包内容如下: 能看到一个aiff格…

解决ssl certificates updated-生成环境中的实例

应原来小伙伴的要求,生产环境出错了,是harbor的ssl cert过期了,也因为使用的是免费的ssl证书,现在无法正常使用harbor,所以贴来了2023年1月曾经搭建的文档,希望能解决问题。^v^. -------------------------…

25 filedialog组件

Tkinter filedialog 组件使用指南 Tkinter 的 filedialog 组件提供了一个图形界面,用于打开和保存文件。它允许用户通过标准的文件选择对话框来选择文件,非常适合需要文件操作的GUI应用程序。以下是对 filedialog 组件的详细说明和一个使用案例。 file…