writefile返回值为ERROR_IO_PENDING,一直等待阻塞,不会继续运行下去

huan7050 2013-11-25 03:51:36
小弟刚接触串口编程,在writefile的时候出现了问题,代码如下
BOOL CUSBDlg::SendData()
{
BOOL Result;
UINT LastError;
UINT i;
CString Str,str_send;
DWORD Length = 0;

if(MyDevFind==FALSE)
{
AddToInfoOut(_T("设备未找到"));
return FALSE;
}

if(hWriteHandle==INVALID_HANDLE_VALUE)
{
AddToInfoOut(_T("无效的写报告句柄,可能是打开设备时失败"));
return FALSE;
}

if(DataSending==TRUE)
{
AddToInfoOut(_T("数据正在发送中,暂时不能发送"));
return FALSE;
}

WriteReportBuffer[0]=0x00;

CString str_id=itos(WriteReportBuffer[0],16).Right(2);
GetDlgItem(IDC_EDIT_REPORTID)->SetWindowText(str_id);
memset(WriteReportBuffer, 0, 512);

GetDlgItemText(IDC_ESend, str_send);
UINT count=str_send.GetLength();
for(i=1; i<1+count; i++)
{
WriteReportBuffer[i]=(UCHAR)str_send.GetAt(i-1);
}
WriteReportBuffer[1] = 0x40;
WriteReportBuffer[2] = 0xa2;
WriteReportBuffer[3] = 0x02;

AddToInfoOut(_T("发送信息:1字节报告ID+8字节实际数据"));
Str=_T("");
for(i=0; i<Capabilities.OutputReportByteLength; i++)
{
Str+=itos(WriteReportBuffer[i],16).Right(2)+_T(" ");
}
AddToInfoOut(Str, FALSE);

str_send.Insert(0, _T("发送信息"));
GetDlgItem(IDC_REC_STR)->SetWindowText(str_send);
UpdateWindow();

DataSending=TRUE;

Result=WriteFile(hWriteHandle,
&WriteReportBuffer,
Capabilities.OutputReportByteLength,
&Length,
&WriteOverlapped);

if(Result==FALSE)
{
LastError=GetLastError();
if((LastError==ERROR_IO_PENDING)||(LastError==ERROR_SUCCESS))
{
WaitForSingleObject(WriteOverlapped.hEvent, INFINITE);
return TRUE;
}
else
{
DataSending=FALSE;
AddToInfoOut(_T("发送失败,错误代码:")+itos(LastError));
if(LastError==1)
{
AddToInfoOut(_T("该设备不支持WriteFile函数。"), FALSE);
}
return FALSE;
}
}

AddToInfoOut(_T("数据发送成功!"));
DataSending = FALSE;
return TRUE;

}
...全文
478 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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