正文

[原]VC串口API超时的详细介绍2009-01-04 11:23:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/40153.html

分享到:

_BAT_姜维    发表于2009年01月04日 11:09 阅读(0) 评论(0) 分类: 串口API 权限: 公开
昨天调了一下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,超时介绍到此

阅读(8428) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册