unit comdemou;<br>interface<br>uses<br> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;<br>const<br> Wm_commNotify=Wm_User+12;<br>type<br> TForm1 = class(TForm)<br> procedure FormCreate(Sender: TObject);<br> private<br> Procedure comminitialize;<br> Procedure MsgcommProcess(Var Message:Tmessage); Message Wm_commnotify;<br> { Private declarations }<br> public<br> { Public declarations }<br> end;<br> // 线 程 声 明<br> TComm=Class(TThread)<br> protected<br> procedure Execute;override;<br> end;<br>var<br> Form1: TForm1;<br> hcom,Post_Event:Thandle;<br> lpol
overlapped;<br>implementation<br>{$R *.DFM}<br>Procedure TComm.Execute; // 线 程 执 行 过 程<br>var<br>dwEvtMask
word;<br>Wait:Boolean;<br>Begin<br>fillchar(lpol,sizeof(toverlapped),0);<br>While True do Begin<br> dwEvtMask:=0;<br> Wait:=WaitCommEvent(hcom,dwevtmask,lpol); // 等 待 串 行 口 事 件;<br> if Wait Then Begin<br> waitforsingleobject(post_event,infinite); // 等 待 同 步 事 件 置 位;<br> resetevent(post_event); // 同 步 事 件 复 位;<br> PostMessage(Form1.Handle,WM_COMMNOTIFY,0,0);// 发 送 消 息;<br> end;<br> end;<br>end;<br><br>procedure Tform1.comminitialize; // 串 行 口 初 始 化<br>var<br>lpdcb:Tdcb;<br>Begin<br>hcom:=createfile('com2',generic_read or generic_write,0,nil,open_existing,<br> file_attribute_normal or file_flag_overlapped,0);// 打 开 串 行 口<br> if hcom=invalid_handle_value then<br> else<br> setupcomm(hcom,4096,4096); // 设 置 输 入, 输 出 缓 冲 区 皆 为4096 字 节<br> getcommstate(hcom,lpdcb); // 获 取 串 行 口 当 前 默 认 设 置<br> lpdcb.baudrate:=2400;<br> lpdcb.StopBits:=1;<br> lpdcb.ByteSize:=8;<br> lpdcb.Parity:=EvenParity; // 偶 校 验<br> Setcommstate(hcom,lpdcb);<br> setcommMask(hcom,ev_rxchar); <br> // 指 定 串 行 口 事 件 为 接 收 到 字 符;<br>end;<br>Procedure TForm1.MsgcommProcess(Var Message:Tmessage);<br>var<br>Clear:Boolean;<br>Coms:Tcomstat;<br>cbNum,ReadNumber,lpErrors:Integer;<br>Read_Buffer:array[1..100]of char;<br>Begin<br>Clear:=Clearcommerror(hcom,lpErrors,@Coms);<br>if Clear Then Begin<br> cbNum:=Coms.cbInQue;<br> ReadFile(hCom,Read_Buffer,cbNum,ReadNumber,lpol);<br> // 处 理 接 收 数 据<br> SetEvent(Post_Event); // 同 步 事 件 置 位<br> end;<br>end;<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>comminitialize;<br>post_event:=CreateEvent(nil,true,true,nil); // 创 建 同 步 事 件;<br>Tcomm.Create(False); // 创 建 串 行 口 监 视 线 程;<br>end;<br>end.<br><br><br>这个程序我已经调式了一下,不过好象还是不怎么行,大家帮忙吧!<br>我也在做毕业设计啊,烦死了!<br>