【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

很多时候,我们把ucgui、lwip、uip、sqlite、lua这些第三方软件称之为中间件,虽然他们实际使用上并不困难。和普通的libjpeg、libpng不同,这些中间件因为涉及到状态机切换、流程阻塞,所以在设计上要稍微注意一下。对于我个人而言,对于中间件的接口我是这么设计的,

1、中间件可以是单独的一个thread,比如说可以这么做

middle_ware_init()
middle_ware_run()

2、中间件最好是一个事件驱动型的框架,这项写起来比较方便和简洁,比如像这样

static void get_event() {}static void process_event() {}void middle_ware_run() {while(1) {get_event();process_event();}
}

3、middle ware提供给外部的接口,最好是基于event的阻塞接口,比如这样

void middle_ware_api() {struct event e;struct semaphore s;int type;int data;e.type = type;e.data = data;e.s = s;send_event(&e);wait_for_semaphore(e.s);
}

4、如果middle ware提供的数据可以当场获取,那么也可以直接访问,但是注意mutex保护,

void middle_ware_get() {mutex_get();/*  add your own code here */mutex_release();
}

5、因为middle ware也需要调用lowlevel的接口,如果是非阻塞接口,那么直接调用。如果是阻塞接口,最好另启线程,

void middle_ware_lowlevel(){while(1) {get_lowlevel_data();set_data_to_main_thread();}
}

6、中间件多采用状态机处理,方便简单

void process_event() {switch(state) {case state1:// add your codebreak;case state2:// add your codebreak;case state3:// add your codebreak;default:break;}
}

7、如果需要定时器,直接使用os提供的接口即可,比如

void timer_callback() {get_register_data();send_data_to_main_thread();
}

当然编写中间件的方法多种多样,大家可以根据实际场景灵活应用。关键是要做好对外的接口输出、对外的接口输入以及中间件本身的状态切换,相信做好这几点代码质量差不到哪去。

随想录(中间件接口的定义方法)相关推荐

  1. java批量删除接口怎么定义_教你在Java接口中定义方法

    基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClie ...

  2. java接口方法默认权限_java 接口内定义方法的权限是什么?

    画数据流图和用例图 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下: 1.每门课程都有3到6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门 ...

  3. java中的接口中的方法

    题目如下:(多选题)请选择以下接口定义正确的方法()A:public static void main (String[] args);B:private void test();C:public v ...

  4. java中的接口的定义以及实现关系

    一.什么是接口? - 硬件接口:设备之间的连接方式 - 软件接口:程序代码,特殊的类,表示一种规范,是具有N个方法的特征集合. java中的接口: 专家说的多个抽象类的抽象就是接口. interfac ...

  5. C#类、接口、虚方法和抽象方法

    C#类.接口.虚方法和抽象方法 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派 ...

  6. 【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )

    文章目录 总结 一.接口中定义 call() 方法 二.类中定义 call() 方法 三.完整代码示例 总结 在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 ...

  7. java private 接口_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  8. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  9. 接口(定义,使用方法)

    /* 接口: 1.定义:当一个抽象类,里面全是抽象方法时,叫做接口 2.定义方式:interface 3.成员变量定义方式:public static final 数据类型 变量名 = 值:----- ...

最新文章

  1. Windows Server 2003活动目录:管理特征
  2. Python3将xml文件解析为Python对象
  3. 又见斐波那契数列(矩阵构造+矩阵快速幂)
  4. Python——有关transpose的多维转置的难点
  5. 有限状态机与应用一例
  6. TrueCrypt 为何决定终止项目
  7. 【Kafka】kafka 消费者组静态成员(static consumer member)
  8. markdown语法简明笔记
  9. 特殊的forward_list操作
  10. 时域上的乘积等于频域上的卷积_图卷积神经网络:Graph Convolutional Networks
  11. 错误解决办法:2006:MySQL server has gone away
  12. jsp mysql demo_ntko: ntko办公插件使用案例demo使用java+jsp+mysql实现
  13. mathtype注册表
  14. 51单片机应用篇-- --倒计时数字钟,矩阵按键可调
  15. smartdns使用指南_OpenWrt之SmartDNS 使用教程(PLUS+版)
  16. mysql设计用户标签库_针对Tag/标签的数据库设计思考 | 学步园
  17. 机器学习算法(十):线性回归之最小二乘法
  18. 学习笔记96—WIN7/WIN8/WIN10 安装 MSDE SQL2000 卡住不动的解决办法
  19. ERP基础数据 金蝶
  20. 新买的电脑网速慢的解决方案

热门文章

  1. Linux集群和自动化维1.3 如何根据服务器应用选购服务器
  2. MS 的IOC容器(ObjectBuilder)?
  3. 不容易,今天的成果。
  4. Yii2 Start Process and File Loading
  5. docker数据卷的使用 -v --volumes--from
  6. 【数据仓库】——星型模型和雪花模型
  7. Spring MVC-页面重定向示例(转载实践)
  8. 设计模式(十三): 命令模式
  9. Python实现CGI环境
  10. ORACLE 语句关联统计