[語法] RS232裡面的一些函數(以查過很多資料)

看板C_and_CPP作者 (99通未接來電)時間15年前 (2009/07/14 23:54), 編輯推噓0(0016)
留言16則, 4人參與, 最新討論串1/1
目前 在學習RS232 所以就直接拿別人的CODE來看 但有幾行函數 網路上找很多資料 都還是沒辦法了解對方的表達意思 希望各位先進 能幫忙解答 非常感謝妳 主要是meset這行 跟 WaitForSingleObject 這二個 WaitForSingleObject 這不是應該要判斷回傳訊息嗎? 我看read 跟write都沒判斷 我查msdn WaitForSingleObject如果 回傳WAIT_OBJECT_0 在判斷GetOverlappedResult 之後回傳true然後data_counter++ 這是我的想法 可是網路上的code跟我想的都不一樣 但跑出來的結果又是正確的 有人能解說一下這邊的 read&write分別用 WaitForSingleObject 哪幾行說明嗎? 參考網址程式: http://www.edaboard.com/ftopic51410.html msdn:http://msdn.microsoft.com/en-us/library/ms810467.aspx CSerial::CSerial() {  memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) );//??作用?  memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) );//??作用? } BOOL CSerial::WriteCommByte( unsigned char ucByte ) { BOOL bWriteStat; DWORD dwBytesWritten; bWriteStat = WriteFile( m_hIDComDev, (LPSTR) &ucByte, 1, &dwBytesWritten, &m_OverlappedWrite ); if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ){ if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) )//這不是要判斷 dwBytesWritten = 0; //不懂 回傳的訊息 else { GetOverlappedResult( m_hIDComDev,&m_OverlappedWrite,&dwBytesWritten,FALSE); m_OverlappedWrite.Offset += dwBytesWritten; } } return( TRUE ); } int CSerial::ReadData( void *buffer, int limit) { if( !m_bOpened || m_hIDComDev == NULL ) return( 0 ); BOOL bReadStatus; DWORD dwBytesRead, dwErrorFlags; COMSTAT ComStat; ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat ); if( !ComStat.cbInQue ) return( 0 ); dwBytesRead = (DWORD) ComStat.cbInQue; if( limit < (int) dwBytesRead ) dwBytesRead = (DWORD) limit; bReadStatus = ReadFile( m_hIDComDev, buffer, dwBytesRead, &dwBytesRead, &m_OverlappedRead ); if(!bReadStatus ) { if( GetLastError() == ERROR_IO_PENDING ) { WaitForSingleObject( m_OverlappedRead.hEvent, 2000 );//不懂 return( (int) dwBytesRead ); //不懂 } return( 0 ); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.18.65

07/14 23:56, , 1F
//縮排一下好嗎
07/14 23:56, 1F
※ 編輯: gg1122 來自: 61.216.18.65 (07/15 00:06)

07/14 23:59, , 2F
函式的用途 直接拿名稱去google就可以知道了
07/14 23:59, 2F

07/14 23:59, , 3F
抱歉你有查了 :P
07/14 23:59, 3F

07/15 00:40, , 4F
WaitForSingleObject可以當作檢查事件是否觸發
07/15 00:40, 4F

07/15 00:40, , 5F
同時那個2000/1000是Timeout的部分, 時間超過程式也會繼續
07/15 00:40, 5F

07/15 00:41, , 6F
最上頭memset的部分就只是先把資料填0進去
07/15 00:41, 6F

07/15 00:44, , 7F
不過一般開發serial的lib, timeout都可以讓user自己設定
07/15 00:44, 7F

07/15 00:45, , 8F
這上頭的程式固定寫死, 或許也只是一時之間的趕工之作吧
07/15 00:45, 8F

07/15 18:15, , 9F
WaitForSingleObject 裡面有幾種message 我看他都沒判斷
07/15 18:15, 9F

07/15 18:15, , 10F
就說他TIME_OUT 或者是抓到buffer 資料
07/15 18:15, 10F

07/15 18:16, , 11F
讓我很不解if(WaitForSingleObjec)這樣到底有什麼意義?
07/15 18:16, 11F

07/15 18:17, , 12F
還是謝謝樓上大大 讓我知道meset 感恩
07/15 18:17, 12F

07/15 22:04, , 13F
WaitForSingleObject有傳回值, 但傳回0就表示事件被觸發
07/15 22:04, 13F

07/15 22:06, , 14F
timeout或是fail時, 傳回的值都是非0值... 所以...
07/15 22:06, 14F

07/16 21:34, , 15F
我看到了 WAIT_OBJECT_0 =0x00000000L = =
07/16 21:34, 15F

07/16 21:35, , 16F
感謝大大 我鬼打牆了 我ㄧ直認為哪些訊息 都是有值的 = =
07/16 21:35, 16F
文章代碼(AID): #1ANAeilB (C_and_CPP)