我想检查WriteFile函数是否已完成向UART的写入,以便可以在同一ComDev上调用ReadFile而不会引起异常。

看来WriteFile function可以在编写完成之前返回。

BOOL WriteCommBlock(HANDLE * pComDev, char *pBuffer , int BytesToWrite)
{
while(fComPortInUse){}

fComPortInUse = 1;

BOOL       bWriteStat   = 0;
DWORD      BytesWritten = 0;
COMSTAT    ComStat      = {0};
OVERLAPPED osWrite      = {0,0,0};

if(WriteFile(*pComDev,pBuffer,BytesToWrite,&BytesWritten,&osWrite) == FALSE)
{
    short Errorcode = GetLastError();
    if( Errorcode != ERROR_IO_PENDING )
        short breakpoint = 5; // Error

    Sleep(1000); // complete write operation TBD

    fComPortInUse = 0;
    return (FALSE);
}


fComPortInUse = 0;
return (TRUE);
}

我使用Sleep(1000)作为解决方法,但是如何等待适当的时间?

最佳答案

由于您没有说需要异步I / O,因此应尝试同步。更容易。我认为,如果只为OVERLAPPED arg传递一个空指针,则会获得同步,阻塞,I / O。请参阅我在本文档的“Windows C”部分中编写的示例代码:

http://www.pololu.com/docs/0J40/

关于c++ - 如何检查WriteFile函数是否完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12013161/

10-12 05:46