接口设计漫谈之回调函数1
来源:互联网 发布:恺英网络股票千股千评 编辑:程序博客网 时间:2024/06/06 19:54
回调函数一
最近看到一个USB设备数据通讯的接口设计,觉得很典型,值得拿出来说一下。
接口很简单,核心的就是两个函数,如下:
------------------------------------------------------------------------------
Int SendCommand(void *pCmd, int nCmdSize);
Int RcvData(unsigned char *pData, int*pnDataSize);
------------------------------------------------------------------------------
发送函数没什么问题,重点是接收的函数。用户调用SendCommand是用户主动的行为,当用户需要USB设备进行某一动作时即调用该函数向设备发送一个命令。
接收函数RcvData的设计稍微有了点问题,由于USB设备何时向主机发送数据以及数据量的大小是不确定的,因此,用户调用RcvData的结果也是不确定的,有时候 *pnDataSize 为0,有时候可能很大,并且,如果用户长时间不调用RcvData的话,可能会产生内部的数据丢失,即接收缓存溢出导致数据的不可控丢失。
从业务逻辑而言,发送的业务逻辑和接收的业务逻辑是不同的:因为用户发送时,他是已经有了所要发送的命令,而他“主动”调用接收函数时,能否接收到数据是不确定的,如果能接收到数据,数据量有多大也是不确定的,造成这种情况的根源在于USB设备何时有数据发到主机是主机无法控制的,在这种情况下,采用回调函数的方式是比较合适的,也更合理。这也是回调函数的一种常见使用方式,类似这种情况还有网络接收函数,常常也采用异步的回调函数方式作为接口。
- 接口设计漫谈之回调函数1
- Java回调函数之callback接口
- Java回调函数之callback接口
- 接口与回调函数
- /LGC设计模式/GUI 设计之回调函数
- C语言冒泡排序之回调函数设计
- android架构设计基础之回调函数
- c# DLL接口回调函数
- c# DLL接口回调函数
- Android 接口与回调函数
- 55接口和回调函数
- Android 接口的回调函数
- socket client 回调函数接口
- 回调函数之精神
- 回调函数之精神
- android 之 回调函数
- java之回调函数
- 总结之回调函数
- IE 与 FF冲突与不同支持点汇总
- 在window系统(xp,vista,win7)中,如何以system权限启动应用程序?
- static_cast、dynamic_cast reinterpret_cast和const_cast 强制类型转换
- linux解压缩
- Java虚拟机之类的生命周期
- 接口设计漫谈之回调函数1
- struct nand_ecclayout 之解义 ,eccbytes,eccpos,eccfree .
- 用CreateProcessAsUser 创建最低权限进程
- 百度高级搜索
- GLUT ON VS2010
- IP头、TCP头、UDP头详解以及定义
- XMLHttpRequest
- Adobe Flex/AIR
- 进程和线程间的通信方式总结-篇一(转载)