请问你用的是什么控间进行的通讯
如果用scommp那么你就不必要管侦测工作
因为scommp有一个事件当有数据发到
串口里面就会激活这个事件了。
在这个事件里面判断接受的数据。************
* 努力学习 *
*   全为   *
*¥人民币¥*
************

解决方案 »

  1.   

    WaitCommEvent(FCommHandle, FEventMask, @Overlapped);
    if FEventMask = EV_RXCHAR then
      MessageBox(0);
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  2.   

    我用的是刷卡机自带的dll,是深圳明华的刷卡机,它有一个检测刷卡机是否插卡的函数,但我不太确信是否要用线程一直来检测,那样的话,刷卡机太繁忙了。
      

  3.   

    Jerry529(猪的海洋) 回答的很好
      

  4.   

    我现在用线程加消息来监视,差不多一秒检测两次,效果还可以
    不知道还有没更好的方法,Jerry529说的方法试了一下,因水平问题没摆弄出来,可以解释详细一点吗?
      

  5.   

    用 comport 控件
    在程序初始化的时候对串口进行初始化
    当刷完卡时在将初始化命令写到读卡器
    这样就可以了
      

  6.   

    用一个timmer控件就可以了,有本书叫《delphi 232 串口通信》,买本看看吧,我想你的问题就全没了
      

  7.   

    procedure TCommEventThread.Execute;
    var
      Overlapped: TOverlapped;
      WaitEventResult: Boolean;
      begin
      FillChar(Overlapped, Sizeof(Overlapped), 0);
      Overlapped.hEvent := FEvent.Handle;// FEvent 是个TEvent对象
      while (not Terminated) do
      begin
        WaitEventResult := WaitCommEvent(FCommHandle, FEventMask, @Overlapped);
        if (GetLastError = ERROR_IO_PENDING) then
          WaitEventResult := (FEvent.WaitFor(INFINITE) = wrSignaled);
        if WaitEventResult then
        begin
          if FEventMask = EV_RXCHAR then
    MessageBeep(0);
          FEvent.ResetEvent;
        end;
      end;
      PurgeComm(FCommHandle, PurgeReadWrite);
    end;