WriteFile在ERROR_IO_PENDING时仍然运行吗

WriteFile在ERROR_IO_PENDING时依然运行吗?

比如在异步方式下,以下代码

        OVERLAPPED m_osWrite;
//......
//省略若干代码
//......
        bWriteStat=WriteFile(hCom,lpOutBuffer,
dwBytesWrite,& dwBytesWrite,&m_osWrite);

if(!bWriteStat)
{
if(GetLastError()==ERROR_IO_PENDING)
{
WaitForSingleObject(m_osWrite.hEvent,1000);
}
}


补充一点,“依然运行”指的是WriteFile继续写数据

------解决方案--------------------

    switch(WaitForSingleObject(m_osWrite.hEvent, _MAXTIMEOUT)) {            
    case WAIT_OBJECT_0:  // 操作完成
        if (GetOverlappedResult(hComm, &m_osWrite, &dwBytesWriten, FALSE))
        {
 
------解决方案--------------------
引用:
Quote: 引用:


    switch(WaitForSingleObject(m_osWrite.hEvent, _MAXTIMEOUT)) {            
    case WAIT_OBJECT_0:  // 操作完成
        if (GetOverlappedResult(hComm, &m_osWrite, &dwBytesWriten, FALSE))
        {
 

可是WriteFile的语句已经被执行过了哦?还是说WriteFile实际上是启动了一个系统进程或线程,在后台处理了IO操作?如果是这样,那么overlapped事件的作用是什么?


一般是系统后台驱动再处理这个延迟事件, overlapped.Event 就是用于驱动通知调用对象 完成了这个操作