相关服务

  • 《现代电子技术》2007年第6期摘录:2007年第6期总第245户端

如发现有乱码,请点击下面链接浏览原文
正文摘录:

2007年第6期总第245户端提出一次订阅请求,服务器将周期性地采集数据,然后周期性地通知客户端,直到客户端取消订阅。在实现0PC服务器时,应该采用MTA(COM多线程套间)模式。MTA技术使得应用程序“并行”地执行多项任务,当多个客户请求服务器数据时,可以为每个客户订阅创建一个回送线程,以提高服务器的实时性,并改善对用户界面的响应性能。’。运用多线程的同时要使用临界区、事件或互斥体等方法实现同步,如果不加任何保护地访问被多个线程所共享的数据,将导致访问冲突。()PC客户调用I()PCAsyncI()2接口的Read、write和Refresh函数时,将产生异步操作请求。第一次异步操作请求使服务器完成异步线程的创建,包括线程的创建和线程事件的创建。该接口服务功能要通过接口实现类来完成,用UML统一建模语言对异步通信过程进行设计如图3所示。图30PC异步读写活动图3.30PC驱动数据维护模块数据存储区是()PC:服务器程序的重要组成部分。运行时,客户端程序不断地读写数据存储区,硬件驱动程序也不断地把最新的数据写入存储区。多线程技术和基于COM双向通信机制的()PC异步读写方式的应用从通信交互方面提高了()PC:服务器与客户间的数据存储效率。通过选择合理的数据存储方式和查询方法来适应0PcDA服务器的的数据更新快、数据增减没有规律的特点,可以进一步提高程序效率。常见的数据存储方式有顺序存储和链式存储。顺序存储方式是有利于查询,但不易动态扩展且易浪费存储空间;链式存储方式适于动态扩展且能充分地利用存储空间,但是查询效率较低。哈希链式存储则充分地利用了顺序存储和线性链式方式的优点。由于异步请求需要存储的数据量不多,而且不用进行查询操作,采用线性链式存取;而项对象数据量较大且需要进行查询操作,故采用的是哈希链式存储。哈希链由哈希链头表和头表节点所指向的链表节点所组成。所有哈希函数值(记为^)相同的项对象都通过指针组成一个双循环链表,并挂在TPIternhashtable[^]这个哈希链表表头之后。当访问一个项对象时,首先通过哈希函数一次确定该项应该在那一个链表中,然后在链表中进行查找,可极大提高查询速度。下面列出该哈希链表数据结构的定义:structhlisthead{structhliststruethlistnodefstructhlist这是一个单指针表头双循环链表“’,在哈希链表中,表头与节点使用不同的数据结构,表头仅有一个指向首节点的指针,而没有指向尾节点的指针,这样可以减少哈希表中存储的表头的空间消耗。为了能统一地修改表头的mst指针,即表头的first指针必须修改指向新插入的节点,该哈希链表节点的ppr-ev不是通常定义的指向前一个节点的指针,而是指向前一个节点(可能是表头)中的next(对于表头则是first)指针,从而在表头插入的操作可通过一致的“*(node一>pprev)”访问和修改前节点的next(或first)指针。pprev指针只在链表管理时(插入与删除)使用,而在查找时仅使用next指针,这样虽然查找是单向链表的效率,但是由于具有同一个哈希值的链较短,所以执行效率也非常好,而且兼有双向链表的插入删除效率。下面列出链表节点插入操作函数,他在next前面加入了new节点,其他操作函数操作方法与此类似。注意这个函数中的参数next不能为空。voidhlistaddbefore(strucl:hlistnode*new.structhlist.node*next){new一>pprev—next一>ppr’ev;new一>next—next:next~>pprev一&new一>next;*(new一>ppre~r)一new;}3.4设备通信模块设备通信模块与底层的硬件设备交互,进行数据传输和物理端口控制。当硬件环境改变时,如通信协议的变换等,通信模块必须进行相应的更换或者升级。为提高软件开发和维护的效率,本应用开发的设备通信模块使用DI。I。文件实现,并定义了自己的接口规范。系统工作时,通过自定义的模块间标准接口完成实际的任务。系统硬件环境发生变化时,开发人员只需遵循自定义的接口规范重新编写DI。L中相应的函数,程序的其他模块并不需要重新联合编译。选择软件升级命令,把新的DLL文件复制到33

阅读此文(图):   点击此处在线翻阅