OpenHarmony轻量系统服务管理samgr-service赏析

在service中提供了服务的基本类型和常量。头文件位于distributedschedule_samgr_lite\interfaces\kits\samgr\service.h。该文件主要用于服务开发,提供基本功能,如服务的生命周期功能、继承宏、任务配置等。

scss 复制代码
//定义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;
//用于配置任务优先级,优先级的有效范围是(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;
//该结构定义了服务的任务配置,包括任务优先级、堆栈大小、队列大小、任务类型和共享任务ID
struct TaskConfig {
    int16 level;    //值来自SpecifyTag
    //任务优先级
    int16 priority; //值来自TaskPriority
    uint16 stackSize;   //任务栈的大小
    uint16 queueSize;    //任务队列的大小
    //任务类型
    uint8 taskFlags;    //值来自TaskType
};
struct Service {
    //Samgr在服务注册和启动期间调用此函数
    //@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类继承成员的宏。
//这个宏提供了继承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)
相关推荐
2501_919749037 小时前
华为鸿蒙免费刷题软件—小羊免费刷题
华为·harmonyos·鸿蒙
游戏智眼7 小时前
HarmonyOS 7 适配升级:NIM SDK 释放端侧 AI 与网络能力
人工智能·harmonyos
阿钱真强道9 小时前
01 嵌入式操作系统 | 课程导论与虚拟机安装 Ubuntu
linux·ubuntu·嵌入式·虚拟机
程序猿追9 小时前
react-native-elements 三方库鸿蒙版本适配与使用(MatePad Edge 双模式真机验证)
华为·harmonyos
lqj_本人9 小时前
白泽上手:给小鸿 SE 写一个温控风扇工程
harmonyos
贾伟康10 小时前
【口算王|12】HarmonyOS ArkTS 启动页实战:处理 Splash 到训练首页的稳定切换
harmonyos·arkts·启动优化·uiability·windowstage
万物智能信息科技11 小时前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos
万物智能信息科技12 小时前
MIPI DSI屏幕输出—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
嵌入式硬件·华为·开源·harmonyos·鸿蒙
贾伟康12 小时前
【口算王|13】HarmonyOS ArkTS 应用启动链路实战:从 EntryAbility 到首屏加载保持窗口与路由稳定
harmonyos·arkts·arkui·应用启动·entryability
不悔哥13 小时前
开源 OOMWOO:自己组一台扫地机
开源·嵌入式