本人大一小白最近在自學用mfc的api函式寫一個串口通信。。主要是實作一個電子秤稱重系統,我用同步操作的方式做出來了(因為比較簡單),但是用異步做不出來,主要原因在于:要用到多執行緒的知識,但是在網上查了資料后還是看不懂概念。。
問題主要是執行緒函式怎么寫??執行緒函式應該放在這個cpp的哪個位置??以下的代碼是我讀寫串口的代碼(還沒加入執行緒的)
但是已經出現了一個問題:writefile函式的第四個引數回傳實際寫入的位元組數,但是我一直回傳的是0是怎么回事。。
BOOL write()
{
char buffer[6]={0x55,0x11,0x00,0x00,0x11};
COMSTAT ComStat;
DWORD dwRetwrite=0;
DWORD dwErrorFlags;
OVERLAPPED m_osWrite;
BOOL bWriteStat;
memset(&m_osWrite,0,sizeof(m_osWrite));
ClearCommError(hcom,&dwErrorFlags,&ComStat);
PurgeComm(hcom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
bWriteStat=WriteFile(hcom,buffer,5,&dwRetwrite,&m_osWrite);
if(!bWriteStat)
{
if(GetLastError()==ERROR_IO_PENDING)
WaitForSingleObject(m_osWrite.hEvent,INFINITE);
else
return FALSE;
}
return TRUE;
}
BOOL read()
{
char inBuffer[6]={0};
DWORD dwRetread=0;
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
BOOL bReadStatus;
bReadStatus=ReadFile(hcom,inBuffer,5,&dwRetread,&m_osRead);
if(!bReadStatus)
{
if(GetLastError()==ERROR_IO_PENDING)
{
WaitForSingleObject(m_osRead.hEvent,INFINITE);
}
return FALSE;
}
return TRUE;
}
uj5u.com熱心網友回復:
還有一個就是read函式中有個createevent的函式,這個是有什么意義?
uj5u.com熱心網友回復:
GetOverlappedResult 獲取掛起結果
bWriteStat=WriteFile(hcom,buffer,5,&dwRetwrite,&m_osWrite);
if(!bWriteStat && GetLastError()==ERROR_IO_PENDING)
{
bWriteStat = GetOverlappedResult(hcom, &m_osWrite, &dwRetwrite, TRUE)
}
uj5u.com熱心網友回復: