windows的Communications API中好像没有处理连接超时的。如我想呼叫另一台串口设备时,如果对方在一分钟内不应答(不连接),我将自动断掉这次连接,该如何做啊。我应该捕获那些消息。谢谢了

解决方案 »

  1.   

    串口通讯本来就没有超时这个概念
    什么叫做“呼叫另一台串口设备”?
    串口的操作只有打开、关闭、发送、接收数据。
    是不是把它理解成象TCP/IP网络协议一样?那就想歪了。
      

  2.   

    SetCommTimeouts()是对读写操作的,不是对连接操作的
      

  3.   

    通过重叠readfile操作,判断超时,然后关闭
      

  4.   

    BOOL WinComm::ReadComm(LPVOID lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead,DWORD TIME_OUT)
    {    BOOL bReadStatus;    bReadStatus = ReadFile( hComm, lpBuffer, nNumberOfBytesToRead,lpNumberOfBytesRead,&ovRD);
        if( !bReadStatus ){        if ( ::GetLastError()== ERROR_IO_PENDING)
            {
              if(::WaitForSingleObject(ovRD.hEvent,TIME_OUT)==WAIT_FAILED ) return FALSE;
              if(GetOverlappedResult(hComm, &ovRD,lpNumberOfBytesRead, FALSE)) return TRUE ;
            }    }  
        return FALSE;
    }
      

  5.   

    程序里加个Timer就得了.自己慢慢判断
      

  6.   

    串口的连接超时概念是很久以前计算机刚出现时,许多设备如键盘等都是通过串口连接到计算机的,那时有连接超时这个概念,为的是在设备失灵时能主动发现。现在PC发展到今天,早已不用了,但由于软件的连贯性,这个概念还保留到现在,但早已无意义了。lz想实现设备无响应时断掉连接,就简单的关掉句柄就行了。
    首先定义一个握手机制,向设备发出一个命令,如果设备正常就回答一个命令,然后定义一个定时器,或规定一个次数,在指定的时间内或连续发指定次数的命令都没有应答,就认为连接失败,关掉串口。