service.h代码分析
这里主要是说明一些和服务相关的结构体,一些任务相关的配置结构体
文件位置:distributedschedule_samgr_lite\interfaces\kits\samgr\service.h
结构体介绍
下面是一些结构体的介绍
任务类型
这个就是一个共用体,枚举所有的任务task类型有哪些。
typedef enum TaskType {
//根据服务的优先级共享任务
SHARED_TASK = 0,
//服务独占的任务
SINGLE_TASK = 1,
//由多个服务共享的指定任务
SPECIFIED_TASK = 2,
//没有任务
NO_TASK = 0xFF,
} TaskType;
多服务共享任务等级
用于指定多服务共享任务,这些枚举用于指定多服务共享任务
typedef enum SpecifyTag {
LEVEL_HIGH = 0,
LEVEL_MIDDLE = 1,
LEVEL_LOW = 2,
LEVEL_CUSTOM_BEGIN,//自定义
} SpecifyTag;
任务的优先级
这里就是定义不同任务task的优先级,给定了范围(9,39)
//用于配置任务优先级,优先级的有效范围是(9,39)
typedef enum TaskPriority {
//Low: (9, 15)
PRI_LOW = 9,
// [16, 23)
PRI_BELOW_NORMAL = 16,
//[24, 31)
PRI_NORMAL = 24, //日志服务可用
//高于正常优先级:[32,39),通信服务可用
PRI_ABOVE_NORMAL = 32,
//优先级上限
PRI_BUTT = 39,
} TaskPriority;
任务配置信息
这里就是包含了一个任务的所有信息,要有一个标记等级,他的优先级,还有他的size。队列size,任务类型等信息,就是简单任务封装。
//该结构定义了服务的任务配置,包括任务优先级、堆栈大小、队列大小、任务类型和共享任务ID
struct TaskConfig {
int16 level; //值来自SpecifyTag
//任务优先级
int16 priority; //值来自TaskPriority
uint16 stackSize; //任务栈的大小
uint16 queueSize; //任务队列的大小
//任务类型
uint8 taskFlags; //值来自TaskType
};
服务结构体
里面主要是四个函数,GetName,Initialize,MessageHandle,GetTaskConfig
获取服务名,初始化服务,处理消息(任务),获取任务的配置信息。
struct Service {
//@service指向服务的指针。
//如果成功获取服务名,返回一个不超过16字节的常量字符串;如果获取服务名失败,返回NULL
const char *(*GetName)(Service *service);//获取service名
//服务注册和启动时候需要这部分信息
//服务初始化------在Samgr给一个服务分配任务后,该服务在自己的任务中调用函数
//@service指向服务的指针。
//@identity系统分配给服务的ID
//如果初始化成功返回TRUE,否则返回FALSE。
BOOL (*Initialize)(Service *service, Identity identity);
//处理service消息-------该函数用于处理调用者通过IUnknown发送的请求。
//@service指向服务的指针。
//@request请求数据的指针。
//如果消息处理成功返回TRUE,处理失败返回FALSE
BOOL (*MessageHandle)(Service *service, Request *request);
//获取一个service的task配置
TaskConfig (*GetTaskConfig)(Service *service);
};
下面是一些宏
//这个宏提供了继承service类生命周期函数的功能
#define INHERIT_SERVICE \
const char *(*GetName)(Service * service); \
BOOL (*Initialize)(Service * service, Identity identity); \
BOOL (*MessageHandle)(Service * service, Request * request); \
TaskConfig (*GetTaskConfig)(Service * service)
以上为service的头文件信息,下面开始分析源文件