MiniGUI源码分析:MiniGUIMain中有…

本文深入分析了MiniGUI库的源码,重点关注MiniGUIMain中的InitGUI和TerminateGUI函数。InitGUI是MiniGUI的主要初始化函数,包括字符串管理、杂项初始化、图形设备初始化等多个步骤。TerminateGUI则是反向过程,负责释放资源。在多线程环境中,MiniGUI启动后会创建Desktop、timer和IAL线程。InitGUI的详细步骤和潜在的CPU占用问题对理解和优化MiniGUI的性能至关重要。
摘要由CSDN通过智能技术生成
我们知道,一般C语言的入口都是main,那么MiniGUIMain函数怎么成为入口呢?

在MiniGUI源码include/minigui.h中,定义了宏

  1. #define MiniGUIMain  
  2. MiniGUIAppMain (int args, const char* argv[]);  
  3. int main_entry (int args, const char* argv[])  
  4.  
  5.     int iRet 0;  
  6.     if (InitGUI (args, argv) != 0)  
  7.         return 1;  
  8.      
  9.     iRet MiniGUIAppMain (args, argv);  
  10.     TerminateGUI (iRet);  
  11.     return iRet;  
  12.  
  13. int MiniGUIAppMain  

其中main_entry,在linux 直接被定义为main, 但是,当_USE_MINIGUIENTRY被定义后,它被定义为minigui_entry:
  1. #ifdef _USE_MINIGUIENTRY  
  2.   #define main_entry minigui_entry  
  3.   int minigui_entry (int args, const char* arg[]);  
  4. #else  
  5.   #define main_entry main  
  6. #endif  

定义minigui_entry可以用在一些RTOS系统上,如vxworks上。因为它们的入口不是从main开始的。


上面我们的程序,就被展开。可以看到,其中最最要的是InitGUI和TerminateGUI两个函数。


InitGUI函数时主要的初始化函数,我们详细分析下该函数。

InitGUI就定义在minigui.h中,它的原型是:

  1. MG_EXPORT int GUIAPI InitGUI (int, const char **);  

InitGUI的实现,有多个版本,在线程版中,是在src/kernal/init.c中实现的。我们重点考察这一部分:(删除了一些不重要的部分)
  1. int GUIAPI InitGUI (int args, const char *agr[])  
  2.  
  3.     int step 0;  
  4. .......  
  5.      if (!mg_InitFixStr ()) //初始化字符串管理内存。MiniGUI在内部实现一个字符串的内存管理器,可以加快分配速度,减少内存碎片  
  6.         fprintf (stderr, "KERNEL>InitGUI: Init Fixed String module failure!\n");  
  7.         return step;  
  8.      
  9.       
  10.     step++;  
  11.       
  12.     if (!mg_InitMisc ()) //初始化杂项,主要是加载MiniGUI.cfg文件,后面的很多操作,都依赖于MiniGUI.cfg中的配置  
  13.         fprintf (stderr, "KERNEL>InitGUI: Initialization of misc things failure!\n");  
  14.         r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值