请各位帮说说异步串口通讯时WriteFile的工作原理

fjliningcd 2003-12-16 01:24:13
memset( &m_OverlappedWrite, 0, sizeof(LAPPED ) );
m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL);
if (!WriteFile (m_hComm,lpBuf,nCount,&writtenCount,&m_OverlappedWrite))
{
if ( GetLastError() == ERROR_IO_PENDING ) {
WaitForSingleObject OverlappedWrite.hEvent, 1000 );

}
}
为什么程序总是进入if中执行
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangnanonnet 2003-12-30
  • 打赏
  • 举报
回复
异步方式是用WaitCommEvent(idComDev,&dwEvtMask,&os);来等待事件的变化
if (WaitForSingleObject(os.hEvent,MAXTIMEOUT)==WAIT_TIMEOUT)
{
CloseHandle(os.hEvent);
return false;
}
超时会退出
duyhui 2003-12-30
  • 打赏
  • 举报
回复
异步方式不是用返回值来判断的,要用事件机制
sxslyy 2003-12-17
  • 打赏
  • 举报
回复
楼上说的对,异步方式会立即返回,其错误提示是ERROR_IO_PENDING,但这已不代表出错了,而是为一个标识信息,WaitForSingleObject OverlappedWrite.hEvent, 1000 );才是等待串口写操作的正真完成时将事件信号设为有效,以便可以进行下一次写操作!
rwdx 2003-12-16
  • 打赏
  • 举报
回复
因为写操作是异步完成的, 所以会立即返回, 当后台写操作完成后会将m_OverlappedWrite.hEvent事件对象设置为激发状态

2,640

社区成员

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

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