MiniGUI 针对三种运行模式分别定义了不同的宏。
(1) MiniGUI-Threads: _MGRM_THREADS
(2) MiniGUI-Processes: _MGRM_PROCESSES 和_LITE_VERSION
(3) MiniGUI-Standalone : _MGRM_STANDALONE 和 _LITE_VERSION 和
_STAND_ALONE
在安装之后的/usr/local/include/minigui目录的mgconfig.h文件中有如下定义:
/* Define if build MiniGUI-Processes */
/* #undef _MGRM_PROCESSES */
/* Define if build MiniGUI-Standalone */
/* #undef _MGRM_STANDALONE */
/* Define if build MiniGUI-Threads */
#define _MGRM_THREADS 1
(注意:目前我的安装的minigui是为:MiniGUiI-Thread模式的。)
在MiniGUIMain函数中的如下内容:
#ifdef _MGRM_PROCESSES
JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);
#endif
其中,JoinLayer 是MiniGUI-Processes模式的专有函数,因此包含在 _MGRM_PROCESSES
的条件编译中。在 MiniGUI-Processes 运行模式下,每个MiniGUI 客户端程序在调用其它
MiniGUI 函数之前必须调用该函数将自己添加到一个层中(或创建一个新层)。
如果程序是 MiniGUI-Processes 服务器端,你应该改为调用 ServerStartup:
if (!ServerStartup (0 , 0 , 0)) {
fprintf (stderr,
"Can not start the server of MiniGUI-Processes: mginit.\n");
return 1;
}
MiniGUI-Processes 有专有的接口。
MiniGUI-Processes 运行模式是 MiniGUI V2.0.x 在 MiniGUI-Lite 运行模式基础上为具有多进程支持的嵌入式操作系统提供的。MiniGUI V1.6.x 及以前版本为具有多进程特性的 Linux 操作系统提供MiniGUI-Lite 运行模式,使之在高效的客户/服务器架构之上运行多个客户进程,从而充分利用进程地址空间保护这样的高级特性,有了这样的特性,可大大提高基于 MiniGUI 的嵌入式系统的灵活性、稳定性以及可扩展性。比如,我们可以在 MiniGUI-Lite 上运行多个 MiniGUI 客户进程,而单个进程的异常退出,不会影响其他的 MiniGUI 客户进程。而且在这种架构之上,我们可以非常方便地集成第三方应用程序。其实,这也是许多嵌入式设备开发商采用 Linux 操作系统的重要理由。
但是,MiniGUI-Lite 运行模式虽然提供了多进程支持,但无法同时管理来自不同进程间的窗口,
因此,MiniGUI-Lite 用层的概念将不同的进程之间的窗口区分开来。这种实现方法虽然可适用于大多数屏幕分辨率较小的嵌入式设备,但仍然给应用程序的开发带来了不便。
MiniGUI V2.0 则彻底解决了上述问题。MiniGUI V2.0 在 MiniGUI-Lite 运行模式基础上,实现了
完整的多进程环境中的窗口系统,来自不同进程的窗口可以在同一桌面上协调存在。下图 给出了MiniGUI V1.6.x 的 MiniGUI-Lite 运行模式及 MiniGUI 2.0.x 的 MiniGUI-Processes 运行模式在运行相同应用程序情况下的界面效果。
上图 MiniGUI V1.6.x 的 MiniGUI-Lite 运行模式及 MiniGUI 2.0.x 的 MiniGUI-Processes 运行模式图 4.2 中,第一个屏幕运行了 vcongui 和推箱子游戏这两个客户进程。可以看到,我们在运行推箱子程序之后,就看不到 vcongui 程序了;第二个屏幕运行 vcongui、picview 和推箱子游戏这三个客户进程,但我们可在桌面上看到所有的客户进程窗口。
相比 MiniGUI-Lite,MiniGUI-Processes 运行模式具有明显的优势。这使得 MiniGUI 不仅可适用
于传统的嵌入式操作系统(MiniGUI-Threads),还可适用于具有多进程特性的嵌入式操作系统,比如Linux 操作系统。另外,MiniGUI-Processes 也保留了 MiniGUI-Lite 的层概念,用户可以将来自不同客户进程的窗口放到不同的层中,从而实现类似 X Window 那样的工作区。有了 MiniGUI-Processes运行模式,MiniGUI 的应用领域将进一步扩大,不仅可用于高端的嵌入式设备,还可能用于桌面环境。