专栏首页代码GG之家SDL系列讲解(十一) SDL_QUIT流程

SDL系列讲解(十一) SDL_QUIT流程

明天会将自己的很早的一部小说发出,一次发出写的所有的六章,如果时间,或者某天突然觉得可以续写了,那么就是它又一次起航了。

工作期间,码了一个记录工作的小说,有兴趣的可以阅读。当然,文采上面,确实逊色了许多,不过能看完,你能发现一些惊喜,因为很多人物是真实存在的。

移步:

http://blog.csdn.net/a332324956/article/category/1886055

下来,继续我们 的SDL系列讲解

SDL系列讲解(一) 简介

SDL系列讲解(二) 环境搭建

SDL系列讲解(三) 工具安装

SDL是什么,能干什么,为什么我们要学习它?

SDL系列讲解(四) demo讲解

SDL系列讲解(五) 调试c代码

SDL系列讲解(六) SDL_Activity流程

SDL系列讲解(七) SDL_image教程

SDL系列讲解(八) SDL_ttf教程

SDL系列讲解(九) 异常退出分析

SDL系列讲解(十) 按键处理流程

SDL_QUIT时序图

看下创建窗口的流程图,我们简单说下过程。

原理剖析

应用上层调用 this.finish();关闭Activity的时候,走入onDestroy方法,此方法会去调用 SDLActivity.nativeQuit();进入到C代码里面Java_org_libsdl_app_SDLActivity_nativeQuit,这里向系统发出一个退出消息SDL_SendQuit();,以及一个 SDL_SendAppEvent(SDL_APP_TERMINATING)

;消息,让我们去接收,处理退出事件。发送消息,最后走入的是SDL_PushEvent方法,这个是SDL向消息队列扔入一个事件的方法。我们处理的思路是:

使用SDL_PollEvent获取到事件,通过类型过滤出来,如果是SDL_QUIT, 则退出主循环。 这里我们看到onDestroy方法,在处理SDLActivity.nativeQuit();后,进行了一个动作:

这个便是等待我们的SDLMain线程退出,起到同步等待的作用。

看完这条线路,我们再看下,如果我们在c代码main运行完毕,应用的退出流程:

SDL_QUIT主动退出时序图

SDL_QUIT主动退出代码剖析

SDLSurface在创建的时候,就会走到surfaceChanged,然后这里创建了我们的SDLMain线程,进行调用我们写的c代码,同时这里使用 sdlThread.join();等待结束,当结束的时候,调用 SDLActivity.handleNativeExit();来完成退出,然后便走到上面的那个流程了,退出SDL。

本文分享自微信公众号 - 代码GG之家(code_gg_home),作者:陆晓明

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SDL系列讲解(一) 简介

    什么是 SDL Simple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过OpenGL和Di...

    用户1263308
  • SDL系列讲解(四) demo讲解

    整体流程框架 SDL作为一款渲染器,我们首先掌握下它的一些基础要素,本文通过渲染一张图片,熟悉SDL的整个流程。 #include "SDL.h" 扩入我们...

    用户1263308
  • SDL系列讲解(二) 环境搭建

    准备环境 这一节,我们讲解下如何搭建SDL 的 Android开发环境。我们当前的电脑环境为: 系统 Window 7 64位 内存 8...

    用户1263308
  • 「SDL第五篇」彻底理解纹理(Texture)

    这是SDL系列文章的第五篇,本文将彻底让你理解什么是纹理。并带你深入探讨SDL的几个重要概念SDL_Window、SDL_Render、SDL_Surface ...

    音视频_李超
  • FFmpeg4.0+SDL2.0笔记02:Outputting to the Screen

    背景:在系统性学习FFmpeg时,发现官方推荐教程还是15年的,不少接口已经弃用,大版本也升了一级,所以在这里记录下FFmpeg4.0+SDL2.0的学习过程。

    非一
  • SDL系列讲解(一) 简介

    什么是 SDL Simple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过OpenGL和Di...

    用户1263308
  • (译)SDL编程入门(20)触力反馈

    我们知道了[如何用SDL使用操纵杆],现在我们可以使用新的触觉API来使控制器震动。

    arcticfox
  • (译)SDL编程入门(22)定时

    任何类型的游戏API的另一个重要部分是处理时间的能力。在本教程中,我们将制作一个我们可以重新启动的计时器。

    arcticfox
  • (译)SDL编程入门(18)按键状态

    正如我们在鼠标输入教程中看到的那样,除了使用事件之外,还有其他方法可以获得输入设备(鼠标、键盘等)的状态。在本教程中,我们将使用按键状态而不是事件来重新制作键盘...

    arcticfox
  • SDL系列讲解(二) 环境搭建

    准备环境 这一节,我们讲解下如何搭建SDL 的 Android开发环境。我们当前的电脑环境为: 系统 Window 7 64位 内存 8...

    用户1263308

扫码关注云+社区

领取腾讯云代金券