昨天调了一下API结果发现同步ReadFile居然没堵塞就返回,那同步和异步岂不是一个样了,太阳! 线程没错,都没错,所以又拿资料出来看,发现有个超时设置,应该就是他了,嘿嘿。 我原本程序: COMMTIMEOUTS TimeOuts; //设定读超时 TimeOuts.ReadIntervalTimeout=MAXDWORD; TimeOuts.ReadTotalTimeoutMultiplier=0; TimeOuts.ReadTotalTimeoutConstant=0; //在读一次输入缓冲区的内容后读操作就立即返回, //而不管是否读入了要求的字符。 //设定写超时 TimeOuts.WriteTotalTimeoutMultiplier=100; TimeOuts.WriteTotalTimeoutConstant=500; SetCommTimeouts(hCom,&TimeOuts); //设置超时 我留意了一下,它所说的超时是指串口读写操作超时 而总超时就是函数返回的标准,如果操作在总超时之前没完成,那么就结束了本次操作,如果在总超时之前完成了,那马上返回 COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是: 总超时=时间系数×要求读/写的字符数+时间常量 例如,要读入10个字符,那么读操作的总超时的计算公式为: 读总超时=ReadTotalTimeoutMultiplier×10+ReadTotalTimeoutConstant 要注意到无论读或者写,都有个要求的数目和实际读到的数目引用 ReadFile(hCom,str,wCount,&wCount,NULL); wCount要求读入的数目,&wCount读到的数目引用 总超时=WriteTotalTimeoutMultiplier×wCount+ReadTotalTimeoutConstant 而异步虽然是靠事件,但是其内部一定是另起了一个线程。 OK,超时介绍到此 |
正文
[原]VC串口API超时的详细介绍2009-01-04 11:23:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/sword2008/40153.html
阅读(8428) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论