关于串口通信中GetOverlappedResult的问题 在异步方式的串口通信中,调用WriteFile的操作后,执行GetOverlappedResult(hComm, &m_ov, &nBytesSent, TRUE)。但是当每次发送的字节数超过几十个字节时,每次得到的nBytesSent都为4,并且函数的返回值为TRUE, 根据MSDN上的说明:当GetOverlappedResult传入TRUE时,应该把数据发送完才返回呀! 不解,请赐教!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也是新手,不过把书上的一段话让你看看:如果规定了读/写操作的超时,那么当超过规定时间后,hEvent成员会变成有信号的。因此在超时发生后,WaitForSingleObject和GetOverlappedResult都会结束等待。 我的WriteFile做的是异步操作,应该没有超时的概念吧?代码结构是这样:WriteFile(); //返回FLASHdwError = GetLastError();if (ERROR_IO_PENDING == dwError){ GetOverlappedResult();} 超时是在COMMTIMEOUTS结构体中设置的,包括读超时和写超时commtimeouts.ReadIntervalTimeout = 100;//读数据超时(当100毫秒内没有数据到达串口时串口置overlappedRead.hEvent为有信号)commtimeouts.ReadTotalTimeoutMultiplier = 0;commtimeouts.ReadTotalTimeoutConstant = 0;commtimeouts.WriteTotalTimeoutMultiplier = 0;commtimeouts.WriteTotalTimeoutConstant = 0;而不是在WriteFile里设置读写超时的.你上面的情况我也遇到过.一般我都是通过循环来控制nBytesToSent(需要发送字节数),nBytesSend(已经发送字节数)这两个变量.循环条件为while(nBytesToSent>nBytesSend)每次GetOverlappedResult后nBytesToSend = nBytesToSend - nBytesSend;nBytesSend = 0; VC中如何读取GIF文件的数据部分. vc6 CWebBrowser2远程打开ftp上的WORD文件,多用户不能同时打开同一个文件 Com组件调用Com组件的问题 请教一个关于暗弹IE窗口的问题,请高手帮忙解决 新手求助! 使用VC7编写HID设备通信程序问题,急,急!!! 请问在一个Picture控件上怎样显示一幅yuv图像?见答给分,谢谢! MSN Messager接收的汉字怎么是乱码? 明明做了类的却说没有申明???急 请教一个关于Windows Shell编程的问题 如何设置CListCtrl中某一项的背景颜色?? 怎样调试进程间调用的程序
WriteFile(); //返回FLASH
dwError = GetLastError();
if (ERROR_IO_PENDING == dwError)
{
GetOverlappedResult();
}
commtimeouts.ReadIntervalTimeout = 100;//读数据超时(当100毫秒内没有数据到达串口时串口置overlappedRead.hEvent为有信号)
commtimeouts.ReadTotalTimeoutMultiplier = 0;
commtimeouts.ReadTotalTimeoutConstant = 0;
commtimeouts.WriteTotalTimeoutMultiplier = 0;
commtimeouts.WriteTotalTimeoutConstant = 0;
而不是在WriteFile里设置读写超时的.
你上面的情况我也遇到过.一般我都是通过循环来控制
nBytesToSent(需要发送字节数),nBytesSend(已经发送字节数)这两个变量.
循环条件为while(nBytesToSent>nBytesSend)
每次GetOverlappedResult后nBytesToSend = nBytesToSend - nBytesSend;
nBytesSend = 0;