怎么判斷串口已發送完畢?(qt5, c++)
2 回答

慕桂英3389331
TA貢獻2036條經驗 獲得超8個贊
12345678910111213141516171819202122232425262728293031323334 | 寫6個 異步延遲等待1秒肯定能寫完 然后判斷 重疊結構 判斷寫的數據 跟 真正寫的數據 是不是相等 bool CComControl::Send( BYTE * pBuff, DWORD dwBytesSend) { if (!PortOpened()) return false ; BOOL wRes; DWORD dwBytesW; wRes = WriteFile(m_hCom,pBuff,dwBytesSend,&dwBytesW,&m_ovWrite); if (!wRes) { if (GetLastError() == ERROR_IO_PENDING) { WaitForSingleObject(m_ovWrite.hEvent,1000); wRes = GetOverlappedResult(m_hCom,&m_ovWrite,&dwBytesW, false ); if (!wRes || dwBytesW !=dwBytesSend) { ClearInOut(); return false ; } } else { ClearInOut(); return false ; } } return true ; } |

當年話下
TA貢獻1890條經驗 獲得超9個贊
寫6個 異步延遲等待1秒肯定能寫完 然后判斷 重疊結構
判斷寫的數據 跟 真正寫的數據 是不是相等
bool CComControl::Send(BYTE* pBuff,DWORD dwBytesSend)
{
if (!PortOpened()) return false;
BOOL wRes;
DWORD dwBytesW;
wRes = WriteFile(m_hCom,pBuff,dwBytesSend,&dwBytesW,&m_ovWrite);
if (!wRes)
{
if (GetLastError() == ERROR_IO_PENDING)
{
WaitForSingleObject(m_ovWrite.hEvent,1000);
wRes = GetOverlappedResult(m_hCom,&m_ovWrite,&dwBytesW,false);
if (!wRes || dwBytesW !=dwBytesSend)
{
ClearInOut();
return false;
}
}
else
{
ClearInOut();
return false;
}
}
return true;
}
添加回答
舉報
0/150
提交
取消