下载此文档

多线程实现串口通讯.doc


文档分类:论文 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
多线程实现串口通讯 1 概述在现代的各种实时监控系统和通信系统中,在 Windows 9X/NT 下利用 VC++ 对 RS-232 串口编程是常用的手段。 Windows 9X/NT 是抢先式的多任务操作系统, 程序对 CPU 的占用时间由系统决定。多任务指的是系统可以同时运行多个进程,每个进程又可以同时执行多个线程。进程是应用程序的运行实例, 拥有自己的地址空间。每个进程拥有一个主线程, 同时还可以建立其他的线程。线程是操作系统分配 CPU 时间的基本实体, 每个线程占用的 CPU 时间由系统分配, 系统不停的在线程之间切换。进程中的线程共享进程的虚拟地址空间, 可以访问进程的资源,处于并行执行状态,这就是多线程的基本概念。 2 VC++ 对多线程的支持使用 MFC 开发是较普遍的 VC++ 编程方法。在 VC++ 下, MFC 应用程序的线程由 CWinThread 对象表示。 VC++ 把线程分为两种:用户界面线程和工作者线程。用户界面线程能够提供界面和用户交互,通常用于处理用户输入并相应各种事件和消息; 而工作者线程主要用来处理程序的后台任务。程序一般不需要直接创建 CWinThread 对象,通过调用 AfxBeginThread() 函数就会自动创建一个 CWinThread 对象,从而开始一个进程。创建上述的两种线程都利用这个函数。线程的终止取决于下列事件之一:线程函数返回;线程调用 ExitThread() 退出; 异常情况下用线程的句柄调用 TerminateThread() 退出;线程所属的进程被终止。 3 多线程在串口通信中的应用 串口通信对线程同步的要求因为同一进程的所有线程共享进程的虚拟地址空间,而在 Windows 9X/NT 系统下线程是汇编级中断,所以有可能多个线程同时访问同一个对象。这些对象可能是全局变量, MFC 的对象, MFC 的 API 等。串口通信的几个特点决定了必须采用措施来同步线程的执行。串口通信中, 对于每个串口对象, 只有一个缓冲区, 发送和接收都要用到, 必须建立起同步机制, 使得在一个时候只能进行一种操作, 否则通信就会出错。进行串口通信处理的不同线程之间需要协调运行。如果一个线程必须等待另一个线程结束才能运行, 则应该挂起该线程以减少对 CPU 资源的占用,通过另一进程完成后发出的信号( 线程间通信) 来激活。 VC++ 提供了同步对象来协调多线程的并行,常用的有以下几种: CSemaphore : 信号灯对象, 允许一定数目的线程访问某个共享资源,常用来控制访问共享资源的线程数量。 Cmutex : 互斥量对象, 一个时刻至多只允许一个线程访问某资源,未被占用时处于有信号状态,可以实现对共享资源的互斥访问。 CEvent : 事件对象, 用于使一个线程通知其他线程某一事件的发生, 所以也可以用来封锁对某一资源的访问, 直到线程释放资源使其成为有信号状态。适用于某一线程等待某事件发生才能执行的场合。 CCriticalSection :临界区对象,将一段代码置入临界区,只允许最多一个线程进入执行这段代码。一个临界区仅在创建它的进程中有效。 等待函数 Win32 API 提供了能使线程阻塞其自身执行的等待函数,等待其监视的对象产生一定的信号才停止阻塞, 继续线程的执行。其

多线程实现串口通讯 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xxj16588
  • 文件大小0 KB
  • 时间2016-05-07