基于TCPIP 的多线程通信及其在远程监控系统中的应用

基于TCPIP 的多线程通信及其在远程监控系统中的应用

ID:41009303

大小:83.08 KB

页数:5页

时间:2019-08-13

基于TCPIP 的多线程通信及其在远程监控系统中的应用_第1页
基于TCPIP 的多线程通信及其在远程监控系统中的应用_第2页
基于TCPIP 的多线程通信及其在远程监控系统中的应用_第3页
基于TCPIP 的多线程通信及其在远程监控系统中的应用_第4页
基于TCPIP 的多线程通信及其在远程监控系统中的应用_第5页
资源描述:

《基于TCPIP 的多线程通信及其在远程监控系统中的应用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于TCP/IP的多线程通信及其在远程监控系统中的应用作者:上海交通大学自动化研究所(200030)王金廉谢剑英贾青来源:《电子技术应用》摘要:提出了一种在WindowsNT下基于TCP/IP协议的多线程通信的设计与实现方法,在此基础上给出了多线程通信在蓄电池远程监控系统中的应用实例。关键词:多线程实时性TCP/IP协议远程监控系统传统的应用程序都是单线程的,即在程序运行期间,由单个线程独占CPU的控制权,负责执行所有任务。在这种情况下,程序在执行一些比较费时的任务时,就无法及时响应用户的操作,影响了应用程

2、序的实时性能。在监控系统,特别是远程监控系统中,应用程序往往不但要及时把监控对象的最新信息反馈给监视客户(通过图形显示),还要处理本地机与远程机之间的通信以及对控制对象的实时控制等任务,这时,仅仅由单个线程来完成所有任务,显然无法满足监控系统的实时性要求。在DOS系统下,这些工作可以由中断来完成。而在WindowsNT下,中断机制对用户是不透明的。为此,可引进多线程机制,主线程专门负责消息的响应,使程序能够响应命令和其他事件。辅助线程可以用于完成其他比较费时的工作,如通信、图形显示和后台打印等,这样就不至于

3、影响主线程的运行。1WindowsNT多线程概述WindowsNT是一个真正的抢占式多任务操作系统。在WindowsNT中,启动一个应用程序就是启动该应用程序的一个实例,即进程。进程由一个或多个线程构成,拥有内存和资源,但自己不能执行自己,而是进程中的线程被调度执行。进程至少要有一个线程,当创建一个进程时,就创建了一个线程,即主线程。主线程可以创建其他辅助线程,由主线程创建的线程又可创建线程。每个线程都可指定优先级,操作系统根据线程的优先级调度线程的执行。WindowsNT中使用多线程的方法有三种:·使用C

4、多线程库函数;·使用CreateThread()等Win32函数;·使用MFC类。本文采用第三种方法。在VisualC++5.0中,MFC应用程序用CWinThread对象表示线程。基本操作如下:·创建新线程:调用MFC全局函数AfxBeginThread()创建新线程。AfxBeginThread()启动新线程并返回控制,然后,新线程和调用AfxBeginThread()的线程同时运行。它的返回值为指向CWinThread对象的指针;·暂停/恢复线程:调用CWinThread类成员函数SuspendThr

5、ead()暂停线程的运行,调用ResumeThread()成员函数恢复线程的运行;·终止线程:在线程内部可调用全局函数AfxBeginThread()终止线程的运行,否则,线程执行结束后,线程自动从线程函数返回并释放线程占有的资源。2基于TCP/IP的多线程编程TCP/IP是lnternet上广泛使用的一种协议,可用于异种机之间的互联。TCP/IP协议本身是非常复杂的,然而在网络编程中,程序员不必考虑TCP/IP的实现细节,只需利用协议的网络编程接口Socket(亦称套接字)即可。在Windows中,网络编

6、程接口是WindowsSocket 它包含标准的BerkleySockets的功能调用的集合,以及为Windows所做的一些扩展。TCP/IP协议的应用一般采用客户/服务器模式,面向连接的应用调用如图1所示。根据上述顺序调用函数建立连接后,通信双方便可交换数据[1]。然而,在调用带*号的函数时,操作常会阻塞,特别是当套接字工作在同步阻塞模式(BlockingMode)时。这时,程序无法响应任何消息。为了避免出现这种情况,本文引进辅助线程。在执行含有可能阻塞的函数的任务时,动态创建新的线程,专门处理该任务。主

7、线程把任务交给辅助线程后,不再对辅助线程加以控制与调度。本文分别针对connect()、accept()、receive()、send()等可能阻塞的函数创建了相应的线程,如表1所示。多线程编程常常还要考虑线程间的通信。线程间的通信可以采用全局变量、指针参数和文件映射等方式。本文采用指针参数方式。在调用AfxBeginThread()函数时,通过传递指针参数的方式在主线程与辅助线程间通信。AfxBeginThread()函数的用法如下:CWinThread*AfxBeginThread (AFX_THREA

8、DPROCpfnThreadproc,LPVOIDpParam,intnPriority=THREAD_PRIORITY_NORMAL, UINTnStackSixe=0,DWORDdwCreateFlags=0,LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL);参数pfnThreadProc指定线程函数 必须如下定义:UINTMyControllingFunction (LP

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。