OpenHarmony分布式调度详解|dmslite.c

100 篇文章 0 订阅
100 篇文章 2 订阅

往期知识点记录:

dmslite.c 源码文件阅读

初始化服务结构体

// 初始化分布式服务结构体
static DistributedService g_distributedService = {
    .GetName = GetName,
    .Initialize = Initialize,
    .MessageHandle = MessageHandle,
    .GetTaskConfig = GetTaskConfig
};

基本模块

基本模块分为五部分:

  • GetName(Service *service):获取服务名称
/**
 * 函数功能:获取服务名称
 * 参数:
 *      service:服务名称
 * 返回值:服务名
 * */
static const char *GetName(Service *service)
{
    if (service == NULL) {
        return EMPTY_SERVICE_NAME;
    }
    return DISTRIBUTED_SCHEDULE_SERVICE;
}
  • Initialize(Service *service, Identity identity):Servcie 初始化函数,一般是要保存 Service 初始化生成的身份信息用于后续收发消息
/**
 * 函数功能:Servcie 初始化函数,一般是要保存 Service 初始化生成的身份信息用于后续收发消息
 * 参数:
 *      service:服务名称
 *      identity:标识服务和 feature
 * 返回值:服务名
 * */
static BOOL Initialize(Service *service, Identity identity)
{
    if (service == NULL) {
        return FALSE;
    }
    ((DistributedService*) service)->identity = identity;  // ID 标识
    return TRUE;
}
  • MessageHandle(Service *service, Request *request):信息处理函数
/**
 * 函数功能:信息处理函数
 * 参数:
 *      service:服务名称
 *      request:请求内容
 * */
static BOOL MessageHandle(Service *service, Request *request)
{
    if (request == NULL || service == NULL) {  // 参数检验
        return FALSE;
    }
    /* process for a specific service-level msgId can be added below */
    switch (request->msgId) {
        default: {
            HILOGW("[Unkonwn msgId = %d]", request->msgId);
            break;
        }
    }
    return TRUE;
}
  • GetTaskConfig(Service *service):返回 Service 对应的 Task 配置
/**
 * 函数功能:返回 Service 对应的 Task 配置
 *
 * */
static TaskConfig GetTaskConfig(Service *service)
{
    // LEVEL_HIGH:多服务共享任务的ID
    // PRI_NORMAL:服务优先级信息
    // STACK_SIZE:任务栈容量的大小
    // QUEUE_SIZE:任务队列的大小
    // SINGLE_TASK:任务类型
    TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, STACK_SIZE, QUEUE_SIZE, SINGLE_TASK};
    return config;
}
  • Init():初始化服务,通过获取实例,来注册服务
static void Init()
{
    /**
     * 函数功能:初始化服务,通过获取实例,来注册服务
     * 参数:
     *      g_distributedService:全局分布式服务
     * */
    BOOL result = SAMGR_GetInstance()->RegisterService((Service *)&g_distributedService);
    HILOGI("[dms service start %s]", result ? "success" : "failed");
}
SYS_SERVICE_INIT(Init);

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请看下图提示:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值