资源大全 | 神秘文化 | 在线翻译 | QQ专区 | 视频教程 | 彩信频道 | 搜索引擎 | BT下载 |  | 网站地图
设为首页
加入收藏
联系站长
您现在的位置: 一百网络 >> 其他编程 >> Delphi编程 >> 文档正文
最近更新
普通文档 Together与Visual.Studi
普通文档 Together与Visual.Studi
普通文档 Together与Visual.Studi
普通文档 Delphi实现在数据库中存
普通文档 Delphi开发多媒体播放音
普通文档 开发工具大比拼之Visual
普通文档 Delphi串口通讯的监听
普通文档 Delphi中远程控制的实现
普通文档 利用Delphi编写Socket通
普通文档 利用Delphi开发网络数据
推荐文章
  • 此栏目下没有推荐文档
  • Delphi串口通讯的监听

    文章作者:佚名 录入时间:2006-6-2 来源:不详
    网站声明:本站的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出处和原始作者,文章版权归本网站与文章作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。


    串口程序我后来研究了好久,写了下面的代码,后台生成一个线程监听串口,不影响前台工作。效果很好,一直用于GPS仪器的数据接收。

    unit frmComm;
    interface
    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, ComCtrls,GeoUtils,GeoGPS;
    const MAXBLOCK = 160;
    type
    TComm = record
    idComDev : THandle;
    fConnected : Boolean;
    end;
    TCommForm = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    StatusBar1: TStatusBar;
    Button2: TButton;
    ComboBox2: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    TCommThread = Class(TThread)
    protected
    procedure Execute;override;
    public
    constructor Create;
    end;
    var
    CommForm: TCommForm;
    CommHandle : THandle;
    Connected : Boolean;
    CommThread : TCommThread;
    implementation
    {$R *.DFM}
    uses
    frmMain,frmMdiMapView;
    procedure TCommThread.Execute;
    var
    dwErrorFlags,dwLength : DWORD;
    ComStat : PComStat;
    fReadStat : Boolean;
    InChar : Char;
    AbIn : String;
    XX,YY : double; file://经度、纬度
    VID : string; file://车号
    begin
    while Connected do begin
    GetMem(ComStat,SizeOf(TComStat));
    ClearCommError(CommHandle, dwErrorFlags, ComStat);
    if (dwErrorFlags >0) then begin
    PurgeComm(CommHandle,(PURGE_RXABORT and PURGE_RXCLEAR));
    // return 0;
    end;
    dwLength := ComStat.cbInQue;
    if (dwLength>0) then begin
    fReadStat := ReadFile(CommHandle, InChar, 1,dwLength, nil);
    if (fReadStat) then begin
    if (InChar <>Chr(13)) and (Length(abIn) < MAXBLOCK+5 ) then AbIn := AbIn + InChar
    else begin
    ...
    {接收完毕,}
    end;//if (fReadStat>0){
    end; file://if (dwLength>0){
    FreeMem(ComStat);
    end;{while}
    end;
    constructor TCommThread.Create;
    begin
    FreeOnTerminate := TRUE;
    inherited Create(FALSE); file://Createsuspended = false
    end;
    //
    procedure TCommForm.Button1Click(Sender: TObject);
    var
    CommTimeOut : TCOMMTIMEOUTS;
    DCB : TDCB;
    fRetVal : Boolean;
    begin
    StatusBar1.SimpleText := '连接中...';
    CommHandle := CreateFile(PChar(ComboBox1.Text),GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL
    , 0);
    if CommHandle = INVALID_HANDLE_VALUE then begin
    StatusBar1.SimpleText := '连接失败';
    Exit;
    end;
    StatusBar1.SimpleText := '已同端口 '+ ComboBox1.Text + ' 连接!';
    CommTimeOut.ReadIntervalTimeout := MAXDWORD;
    CommTimeOut.ReadTotalTimeoutMultiplier := 0;
    CommTimeOut.ReadTotalTimeoutConstant := 0;
    SetCommTimeouts(CommHandle, CommTimeOut);
    GetCommState(CommHandle,DCB);
    DCB.BaudRate := 9600;
    DCB.ByteSize := 8;
    DCB.Parity := NOPARITY;
    DCB.StopBits := ONESTOPBIT;
    fRetVal := SetCommState(CommHandle, DCB);
    if (fRetVal) then begin
    Connected := TRUE;
    try
    CommThread := TCommThread.Create;
    except
    Connected := FALSE;
    CloseHandle(CommHandle);
    fRetVal := FALSE;
    StatusBar1.SimpleText := '线程建立失败';
    Exit;
    end;
    end
    else begin
    Connected := FALSE;
    CloseHandle(CommHandle);
    end;
    end;
    procedure TCommForm.Button2Click(Sender: TObject);
    begin
    Connected := FALSE;
    CloseHandle(CommHandle);
    {终止线程}
    CommThread.Terminate;
    StatusBar1.SimpleText := '关闭端口'+ComboBox1.Text;
    end;
    procedure TCommForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Connected := FALSE;
    CloseHandle(CommHandle);
    StatusBar1.SimpleText := '关闭端口'+ComboBox1.Text;
    end;
    end.

  • 上一篇文档:

  • 下一篇文档:
  •     查找更多“Delphi串口通讯的监听”的内容  
    相关连接
  • 将Java程序变成Windows系统服务

  • 浅析Java多线程程序设计机制

  • Java初学者需掌握的30个基本概念(1)

  • JDBC 入门(1)

  • 面向Java程序员的Ajax:构建动态Java程序(1)