帮我看看这个串口延时的问题,急,谢谢了

ss__328 2006-10-11 03:38:30
if f_COM_HWD = INVALID_HANDLE_VALUE then
begin
f_COM_HWD := CreateFile(PCHAR(f_ComportParam.GetData_String('COM_NAME')),GENERIC_READ or GENERIC_WRITE,0,nil,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL ,0);
if f_COM_HWD = INVALID_HANDLE_VALUE then Exit;
SetupComm(f_COM_HWD, BUFFER_MAXNUM, BUFFER_MAXNUM);
GetCommState( f_COM_HWD, DcbInfo );
BuildCommDCB(PCHAR(f_ComportParam.GetData_String('COM_PARAMS')),DcbInfo );
SetCommState( f_COM_HWD, DcbInfo );

CommTimeout.ReadIntervalTimeout := 10;
CommTimeout.ReadTotalTimeoutMultiplier := 10;
CommTimeout.ReadTotalTimeoutConstant := 10;
CommTimeout.WriteTotalTimeoutMultiplier := 10;
CommTimeout.WriteTotalTimeoutConstant := 10;
SetCommTimeouts(f_COM_HWD, CommTimeout);
PurgeComm(f_COM_HWD,PURGE_RXCLEAR or PURGE_TXCLEAR);
IsOpend := TRUE;
end;

串口初始化函数如上,设置了Read超时确没有效果,再调用ReadFile时就死住,必须收到消息才能继续(这影响了我的其他操作)

请问怎么样才能ReadFile超时就结束啊
...全文
147 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogogo 2006-10-11
  • 打赏
  • 举报
回复
仔细研究下ReadFile的函数返回内容,你简单用个if判断明显不合理,ReadFile不应该返回的是Bool类型吧,比如网络的就有很多返回,另外出了错误,应该还有类似GetLastError的函数来分析使用,你写的这个通信方面的程序,只判断成功和失败这样肯定不够的。另外你说的问题,是不是还可以看看有没有异步的函数可用,复杂度提高,但是绝对不会造成程序其他模块无法工作,到底用同步还是异步,要根据具体情况看。
ss__328 2006-10-11
  • 打赏
  • 举报
回复
顺便把我接收函数也发上来



if( ReadFile(f_COM_HWD, RevBuf, BUFFER_MAXNUM, dwLen, nil)) then
begin
RevData := '';
for I := 1 to dwLen do
RevData := RevData+ CHR(RevBuf[I-1]);
Result := RevData;
end;
chenyansong 2006-10-11
  • 打赏
  • 举报
回复
帮顶···················
chenyansong 2006-10-11
  • 打赏
  • 举报
回复
沙发············

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧