• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-161  評論-223  文章-30  trackbacks-0
               在WINDOWS NT4.0 以上操作系統中,串口通訊有2種模式:同步方式和異步方式。由CreateFile中的dwFlagsAndAttributes參數決定,若指定FILE_FLAG_OVERLAPPED標志則為異步方式,否則為同步方式。當為同步模式時,調用ReadFileWriteFile會阻塞調用線程直到讀完或寫完指定量的數據才返回,這樣就有可能出現無法退出程序的現象,解決方法是為讀寫操作設置超時,注意這種超時指的是ReadFileWriteFile函數的返回時間,僅對同步模式有效。代碼如下
             1   //以下m_pComPort為本人自己封裝的C++串口類CComPort的指針
             2    
             3            // FALSE表示以同步方式打開
             4           m_pComPort->Open(2, FALSE, 38400);
             5     
             6          //設置讀寫超時為5秒
             7               COMMTIMEOUTS  timeout = 0 };
             8           timeout.ReadTotalTimeoutConstant = 5000;
             9           timeout.WriteTotalTimeoutConstant = 5000;
            10          m_pCommPort->SetTimeouts(timeout);
            11
            12            char  szData[1024= 0 };
            13         //讀數據
            14         DWORD dwRet = m_pCommPort->ReadComm(szData, 1024);
            15         //寫數據
            16         dwRet = m_pCommPort->WriteComm(szData, 1024);
            17         //關閉串口
            18         m_pCommPort->Close();
               當為異步模式時,由于讀寫操作會立即返回,因此設置超時指的是設置等待操作完成的時間,而不是ReadFileWriteFile函數返回的時間,代碼如下
             1    //以下m_pComPort為本人自己封裝的C++串口類CComPort的指針
             2     
             3           // TRUE表示以異步方式打開
             4            m_pComPort->Open(2, TRUE, 38400);
             5      
             6          //設置讀寫等待超時為5秒
             7                char  szData[1024= 0 };
             8  
             9         //當第3個參數為0時,讀寫操作會立即返回
            10           //讀數據
            11           DWORD dwRet = m_pCommPort->ReadComm(szData, 10245000);
            12          //寫數據
            13           dwRet = m_pCommPort->WriteComm(szData, 10245000);
            14          //關閉串口
            15           m_pCommPort->Close();
               這里的ReadCommWriteComm的實現內部針對不同模式作了不同處理,異步模式時即調用了WaitForSingleObject等待函數來設置超時。同步模式時即調用不帶重疊結構的ReadFileWriteFile函數來接收或發送指定量的數據。另外在這介紹下串口虛擬軟件vspd,這個軟件能模擬在同一臺計算機上進行兩個串口的通訊,有利于沒有實際設備情況下的串口調試。
            posted on 2009-04-17 19:15 春秋十二月 閱讀(4501) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            国产成人无码精品久久久免费| 国产福利电影一区二区三区久久老子无码午夜伦不 | 麻豆AV一区二区三区久久 | 久久精品夜夜夜夜夜久久| 国产精品福利一区二区久久| 伊人久久大香线焦综合四虎| 欧美成a人片免费看久久| 囯产极品美女高潮无套久久久 | 欧美日韩中文字幕久久伊人| 久久婷婷五月综合97色一本一本| 亚洲av日韩精品久久久久久a | 久久精品国产亚洲Aⅴ蜜臀色欲 | 精品永久久福利一区二区| 色综合久久久久网| 久久久一本精品99久久精品88| 久久亚洲AV成人无码国产| 久久久久久极精品久久久| 中文字幕无码精品亚洲资源网久久| 久久精品国产亚洲av麻豆色欲| 久久久WWW成人免费毛片| 久久久免费精品re6| 香蕉久久永久视频| 国产高潮国产高潮久久久91| 色综合久久无码中文字幕| 国产激情久久久久影院老熟女| 麻豆成人久久精品二区三区免费| 亚洲精品99久久久久中文字幕| 色综合久久中文综合网| 久久婷婷五月综合97色一本一本| 伊人久久大香线蕉无码麻豆| 国产免费久久久久久无码| 99国产精品久久久久久久成人热| 久久伊人精品一区二区三区| 亚洲欧美日韩久久精品| 久久青青草原亚洲av无码| 久久精品亚洲乱码伦伦中文| 久久久久一区二区三区| 亚洲国产二区三区久久| 久久精品国产99国产精品澳门| 99久久久精品免费观看国产| 国产精品一久久香蕉国产线看观看 |