摘录<<计算机世界周报>>
Delphi中串行通信的实现 王琛 
____基于Windows 95/NT的串行通信机制 
____Windows操作系统禁止应用程序直接访问计算机硬件,但它为程序员提供了一系列标准API函数,使得应用程序的编制更加方便,并且免除了对有关硬件调试的麻烦。在Windo ws 95/NT中,原来Windows 3.X的WM_COMMNOTIFY消息已被取消,操作系统为每个通信设备开辟了用户可定义大小的读/写缓冲区,数据进出通信口均由操作系统后台完成,应用程序只需对读/写缓冲区操作即可。Windows 95/NT中
几个常用的串行通信操作函数如下:
CreateFile 打开串行口 
CloseHandle 关闭串行口 
SetupComm 设置通讯缓冲区大小 
ReadFile 读串口操作 
WriteFile 写串口操作 
SetCommState 设置通信参数 
GetCommState 获取默认通信参数 
ClearCommError 清除串口错误并获取当前状态 表1 
____除上述几个函数外,还要经常用到一个重要的记录DCB(设备控制块)。DCB中记录有可定义的串行口参数,设置串行口参数时必须先用GetCommState函数将系统默认值填入DCB 控制块,然后才可设定用户想改变的自定义值。 
____在Windows 95/NT中实现串行通信除了要了解基本的通信操作函数外,还要掌握多线程编程。线程是进程内部执行的路径,是操作系统分配CPU时间的基本实体,每个进程都由单线程开始完成应用程序的执行。串行通信需要利用多线程技术实现,其主要的处理逻辑可以表述如下:进程一开始先由主线程做一些必要的初始化工作,然后主线程根据需要在适当时候建立线程监视通信口,当指定的串行口事件发生时,向主线程发送WM_COMMNO FY消息(由于Windows 95取消了
WM_COMMNOTIFY消息,因此程序员必须自己创建),主线程对其进行处理。若不需要WM_COMMNOTIFY消息,则主线程终止通信监视线程。 ____多线程同时执行可能会引起对共享资源的冲突,为避免冲突,需要用同步多线程对共享资源进行访问。Windows 95提供了许多保持线程同步的方法,笔者采用创建事件对象来保持线程同步。通过CreateEvent()创建事件对象,使用SetEvent()或PulseEvent()函数将事件对象设置成信号同步。在应用程序中,利用WaitSingleObject()函数等待同步的触发,等到指定的事件被其它线程设置为有信号时,才继续向下执行程序。