串口超时回来时间太长,求指教
串口超时返回时间太长,求指教
------解决方案--------------------
对于文件操作本来就是比较耗时间的事情 ,但是要10几秒就应该不是读文件超时引起的吧!、
确认下别的地方呗?
或者在readfile前后加个时间看看!
------解决方案--------------------
串口超时的时长是由系统驱动所决定的。你可以把串口的读写放在一个线程中单独完成,然后在主线程中休眠一段时间(timeout时长),等到休眠醒后判断那个线程是否读写完成。一来主界面不会卡主,另一方面有能自己控制超时时长。
------解决方案--------------------
1、专门开一个线程,负责把串口的数据往buffer中存放;
2、主流程从buffer取出数据进行处理。
------解决方案--------------------
int OpenComPort()
{
strCOM = "COM1";
// open comm port
m_hComm = CreateFile (strCOM, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); //FILE_FLAG_OVERLAPPED
if( m_hComm == (HANDLE)(-1))
{
//Failed to initialize the com port
return 1;
}
// set comm state
DCB dcb;
GetCommState( m_hComm, &dcb );
BuildCommDCB( "115200,n,8,1", &dcb );
if( !SetCommState( m_hComm, &dcb))
{
//Failed to initialize the com port
return 2;
}
COMMTIMEOUTS timeOut;
GetCommTimeouts (m_hComm, &timeOut);
//设定读超时 几十秒后串口无反应将认为超时
timeOut.ReadIntervalTimeout = 100;
timeOut.ReadTotalTimeoutMultiplier = 50;
timeOut.ReadTotalTimeoutConstant = 200;
//设定写超时
timeOut.WriteTotalTimeoutMultiplier = 50;
timeOut.WriteTotalTimeoutConstant = 100;
SetCommTimeouts(m_hComm, &timeOut); //设置超时
SetupComm (m_hComm, 1024, 1024);
PurgeComm (m_hComm, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
if( !WriteFile( m_hComm, input, CmdLen, &dwCount, NULL ) ) // send command
{
//发送串口数据出错
return 1;
}
if( !ReadFile( m_hComm, output, 1024, &dwCount, NULL ) ) //在这里超时太长,要花费几十秒的时间才有返回
{
//读取串口数据
return 1;
}
}
//请问上面超时花费怎样可以时间减少些
串口
------解决方案--------------------
对于文件操作本来就是比较耗时间的事情 ,但是要10几秒就应该不是读文件超时引起的吧!、
确认下别的地方呗?
或者在readfile前后加个时间看看!
------解决方案--------------------
串口超时的时长是由系统驱动所决定的。你可以把串口的读写放在一个线程中单独完成,然后在主线程中休眠一段时间(timeout时长),等到休眠醒后判断那个线程是否读写完成。一来主界面不会卡主,另一方面有能自己控制超时时长。
------解决方案--------------------
1、专门开一个线程,负责把串口的数据往buffer中存放;
2、主流程从buffer取出数据进行处理。
------解决方案--------------------
if( !ReadFile( m_hComm, output, 1024, &dwCount, NULL ) )