我想检查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/