阿里云IOT C-SDK 源码分析系列(6):IOT_Linkkit_Yield 用户 事件调度函数源码分析

在上一篇文章中,着重分析了 SDK的 核心调度线程yield,本文再简单的分析下用户 事件调度 API 接口函数,该函数 原型如下:

原型

void IOT_Linkkit_Yield(int timeout_ms);
接口说明

若SDK占有独立线程, 该函数只将接收到的网络报文分发到用户的回调函数中, 否则表示将CPU交给SDK让其接收网络报文并将消息分发到用户的回调函数中
参数说明

参数	        数据类型	    方向	说明
timeout_ms	int	    输入	    单线程模式下, 每次尝试接收网络报文的超时时间
返回值说明

无返回值

      官方的解释貌似还是有点让人混淆,无操作系的 移植我没有测试过, 这里就简单的 说下在有操作系统的 应用开发下,该函数的功能就是是“用户态”的 “事件调度” ,它会将 接收到的网络报文,进行分析,然后触发对应的用户事件回调函数,不同类型的网络报文,对应不同的 用户回调函数。

    上一篇文章中分析到的 SDK自己的守护、调度线程 yield,是SDK自己使用,而 IOT_Linkkit_Yield 则是 给用户使用的,所以这个接口API的应用有2点需要注意:

①  网关设备,必须要 单独创建一个 线程,运行 IOT_Linkkit_Yield  函数。

② 编写 用户自定义的 事件 回调函数,使用 IOT_RegisterCallback 接口函数 进行 事件 注册,示例代码如下:

/* Register Callback */
IOT_RegisterCallback(ITE_CONNECT_SUCC, user_connected_event_handler);
IOT_RegisterCallback(ITE_DISCONNECTED, user_disconnected_event_handler);
IOT_RegisterCallback(ITE_PROPERTY_SET, user_property_set_event_handler);
IOT_RegisterCallback(ITE_REPORT_REPLY, user_report_reply_event_handler);
IOT_RegisterCallback(ITE_TIMESTAMP_REPLY, user_timestamp_reply_event_handler);
IOT_RegisterCallback(ITE_INITIALIZE_COMPLETED, user_initialized);
IOT_RegisterCallback(ITE_PERMIT_JOIN, user_permit_join_event_handler);

   这些 “事件” 能够反映 整个SDK 的运行 状态,我们在 这些事件 的自定义回调函数中,添加 我们自己的 应用 业务逻辑即可。

关于 SDK 提供的各种事件,官方提供的介绍如下:

Event列表详解

   这里,要特别说明一下,文中提到的 “用户自定义事件回调函数”,并非是我们开发者自己定义的 私有 事件回调函数,而是说,SDK已经规定好了 上面 那些 事件类型, 而且也规定了 这些 回调函数的 框架,其实就是定义好了 形参和返回值类型。我们需要根据这个框架去编写填充 事件回调函数 内容,说到底,这些事件回调函数并非自定义,只不过 这些事件 我们怎么用,才是“自己定义”的。

接下来,分析一下 该函数 的 代码逻辑:

   小结:这个函数 很重要,必须要有,因为所有的 应用开发,其实都是围绕着 SDK提供的 各种 “事件”机制来做开发的。

发布了256 篇原创文章 · 获赞 262 · 访问量 63万+

猜你喜欢

转载自blog.csdn.net/u012351051/article/details/104226729
今日推荐