基于C/S 模式与完成端口的路灯监控软件的设计

[10-10 20:38:44]   来源:http://www.88dzw.com  其它电路   阅读:8605

文章摘要:3. 1. 3 工作线程除了工作在完成端口上的服务线程外,在关联套接字之前,还必须创建一个或多个工作线程,以便在I /O 请求投递给完成端口对象后,为完成端口提供服务。工作线程的个数取决于应用程序的总体设计情况。创建的工作线程由完成端口管理。当有I /O 完成通知到来,则由完成端口唤醒一个工作线程接收I /O 完成通知,并对其进行处理。完成端口自动对工作线程进行调度,唤醒哪个工作线程则由完成端口决定。若无I /O 完成通知,则所有的工作线程都在等待。根据经验,工作线程的数量一般为CPU 数量的两倍再加上2。3. 2 完成端口的程序实现网络通信模块通过CreateIoCompletionPort

基于C/S 模式与完成端口的路灯监控软件的设计,标签:电路设计,http://www.88dzw.com

  3. 1. 3 工作线程

  除了工作在完成端口上的服务线程外,在关联套接字之前,还必须创建一个或多个工作线程,以便在I /O 请求投递给完成端口对象后,为完成端口提供服务。工作线程的个数取决于应用程序的总体设计情况。创建的工作线程由完成端口管理。当有I /O 完成通知到来,则由完成端口唤醒一个工作线程接收I /O 完成通知,并对其进行处理。完成端口自动对工作线程进行调度,唤醒哪个工作线程则由完成端口决定。若无I /O 完成通知,则所有的工作线程都在等待。根据经验,工作线程的数量一般为CPU 数量的两倍再加上2。

  3. 2 完成端口的程序实现

  网络通信模块通过CreateIoCompletionPort 函数创建完成端口对象,并将接收到的socket 对象与完成端口关联, 启动一定数量的工作线程, 通过GetQueuedCompletionStatus 函数获取完成端口上SOCKET 的当前状态,并将收到的数据从缓存出取出。完成端口的主要工作流程图如图2 所示。

完成端口模块流程图

图2 完成端口模块流程图

  主线程:

  1) 程序启动的时候,初始化网络并且创建完成端口句柄:

  CompletionPort = CreateIoCompletionPort ( INVALID_ HANDLE_ VALUE,NULL,0,0);

  2) 启动2* N + 2 个工作线程,N 为CPU 数量:

  3) 进入一个*循环,开始*客户端连接请求;

  4) 将接收到的客户端SOCKET 与完成端口对象绑定;

  5) 发出一个异步的WSARecv 或是WSASend 操作,实际的接收和发送数据操作会由操作系统完成。

  6) 重复以上3) 到5) 的操作。

  工作线程:

  1) 进入循环, 通过GetQueuedCompletionStatus函数, 从完成端口上取得WSASend /WSARecv 的操作结果:

  2) 根据完成端口上I /O 状态, 进行数据的处理;

  3) 提交一个新的WSASend /WSARecv 操作请求;

  4) 重复以上1) 到4) 的操作。

  3. 3 通信规约设计

  整个监控系统采用TCP ( Transmission ControlProtocol,传输控制协议) 进行数据传输,在此基础上设计了一套监控系统规约,来完成服务端与远程终端,服务端与客户端的通信。根据路灯监控的实际需求,数据报文包括以下几种形式。

  1) 远程终端主动向软件服务端发送的连接认证数据报文,如表1 所示。

表1 连接认证数据报文格式

  2) 远程终端定时向软件服务端发送的现场数据报文,主要包括路灯监控现场采集到的电流,电压,温度,开关状态,报警信息等数据信息,如表2 所示。

  3) 软件客户端发送给服务端, 并由服务端转发到相应远程终端的参数设置报文,根据不同的功能号,报文发送不同的参数信息,包括开关灯时间,报警阀值,数据采集周期等如表3 所示。

上一页  [1] [2] [3] [4]  下一页


Tag:其它电路电路设计家电维修 - 单元电路介绍 - 其它电路