初始化

这个组件是用来对整个Melon库进行首次初始化的。

在Melon的初始化过程中的不同阶段,会调用用户提供的一些回调函数进行特定阶段的处理。

这些用户提供的回调函数包含:

  • global_init
  • main_thread
  • master_process
  • worker_process

这些回调函数大致的调用时序如下所示:

                                             |
                                          配置初始化
                                             |
                                    global_init回调函数调用
                                             |
                           一些框架的初始化,例如资源限制、常驻后台、fork等等
                                             |
                           main_thread/master_process/worker_process回调函数调用
                                             |
                                         处理各种事件

global_init是在配置初始化后,但在fork前(如果是启用多进程框架的话)被调用的。这个时候可以通过配置的函数调用到Melon的全部配置,然后依据这些配置做一些针对整个应用程序的初始化行为。

main_thread是在多线程模型下,在主线程内被调用的,用于对主线程设置一些常驻任务的。

master_process/worker_process是在多进程模型下,在主/工作进程中被调用的,用于针对单个进程进行一些全局设置。

msvc中,不包含main_threadmaster_processworker_process。初始化流程仅对配置和日志等初始化后返回。

头文件

#include "mln_framework.h"

模块名

framework

相关结构

struct mln_framework_attr {
    int                            argc; //一般为main的argc
    char                         **argv; //一般为main的argv
    mln_framework_init_t           global_init; //初始化回调函数,一般用于初始化全局变量,该回调会在配置加载完成后被调用
#if !defined(MSVC)
    mln_framework_process_t        main_thread; //主线程处理函数,我们将在多线程框架部分深入
    mln_framework_process_t        master_process; //主进程处理函数,我们将在多进程框架部分深入
    mln_framework_process_t        worker_process; //工作进程处理函数,我们将在多进程框架部分深入
#endif
};

typedef int (*mln_framework_init_t)(void);
typedef void (*mln_framework_process_t)(mln_event_t *);

一般情况下,在Melon的各个组件中,被用来作为初始化参数的结构体都以_attr结尾,且不会被typedef定义为某一类型。

函数

mln_framework_init

int mln_framework_init(struct mln_framework_attr *attr);

描述:该函数是Melon库的整体初始化函数,会加载配置,并根据配置启用或停用Melon中框架部分功能,以及其他额外功能。

返回值:成功则返回0,否则返回-1。

举例:

int main(int argc, char *argv[])
{
    struct mln_framework_attr cattr;
    cattr.argc = argc;
    cattr.argv = argv;
    cattr.global_init = NULL;
    cattr.main_thread = NULL;
    cattr.master_process = NULL;
    cattr.worker_process = NULL;
    return mln_framework_init(&cattr);
}

results matching ""

    No results matching ""