高分求助!关于串口读写等待问题

leitao 2002-12-16 11:26:32
小弟我遇到一个棘手的问题,请各位大虾帮忙。我在使用ReadFile从磁条读写器上读取数据的时候,如果是跟踪的话,就没有问题,如果直接运行程序,不跟踪的话,就会报读错误,我想可能是超时造成的,但是,不知道该在那里设置。我在端口设置的地方是这样设置的:
DCB set_dcb = {0};
COMMTIMEOUTS timeout;
DWORD tmp ;

GetCommState ( tty_fd , &sav_dcb );

timeout.ReadIntervalTimeout = 0xFFFFFFFF;
timeout.ReadTotalTimeoutMultiplier = 5;
timeout.ReadTotalTimeoutConstant = 500;
timeout.WriteTotalTimeoutMultiplier = 5;
timeout.WriteTotalTimeoutConstant = 5000;
if ( !SetCommTimeouts( tty_fd, &timeout) )
{
CloseHandle ( tty_fd );
tmp = GetLastError ();
return ( tmp );
}

set_dcb.DCBlength = sizeof(DCB);
set_dcb.BaudRate =9600;
set_dcb.ByteSize =8;
set_dcb.Parity =NOPARITY;
set_dcb.StopBits =ONESTOPBIT;
if(!SetCommState( tty_fd , &set_dcb))
{

CloseHandle( tty_fd );
tmp = GetLastError();
return ( tmp );
}

ReadFile 是如下调用的:
OVERLAPPED osReader = {0};
osReader.hEvent = CreateEvent ( NULL , TRUE , FALSE , NULL );
...
ReadFile(tty_fd, lpBuf, READ_BUF_SIZE , &dwRead, &osReader)
...
WaitForSingleObject ( osReader.hEvent , 100 );


我不知道是WaitForSingleObject的等待时间太短了,还是在端口设置的时候的读取时间太短了而造成的错误,请各位高手帮帮小弟!不胜感激!
...全文
25 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang865 2002-12-20
  • 打赏
  • 举报
回复
我们公司也是生产这个的,我们提供了DLL供客户使用,你们没有得到厂家的么,用我把我的代码给你么
zhang865 2002-12-20
  • 打赏
  • 举报
回复
你读磁条读写器用上面的代码读写么,

难道厂家没有给你DLL么,他没有告诉你怎么对它进行操作么,
AthlonxpX86 2002-12-19
  • 打赏
  • 举报
回复
gz
zxiaoer 2002-12-19
  • 打赏
  • 举报
回复
试试这样:

if(WaitForSingleObject ( osReader.hEvent , 100 )==WAIT_TIMEOUT)
CancelIo(tty_fd);

如果重叠IO操作未完成,没有cancel之就返回是很危险的。
alexmayer 2002-12-18
  • 打赏
  • 举报
回复
timeout.ReadIntervalTimeout = 0xFFFFFFFF;为什么设成这样?
试试这样:
timeout.ReadIntervalTimeout = 50;
timeout.ReadTotalTimeoutMultiplier = 10 ;
timeout.ReadTotalTimeoutConstant = 1000 ;

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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