2016-02-07 51 views
-2

我不熟悉C++和windows串行通信。現在我正在關注microsoft link。但是,我不知道以下變量的含義,那些變量是什麼。請幫我理解下面的變量。 變量我沒有想法windows串行通信C++

  1. ipBuf
  2. dwRead

代碼

DWORD dwRead; 
BOOL fWaitingOnRead = FALSE; 
OVERLAPPED osReader = {0}; 

// Create the overlapped event. Must be closed before exiting 
// to avoid a handle leak. 
osReader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 

if (osReader.hEvent == NULL) 
    // Error creating overlapped event; abort. 

if (!fWaitingOnRead) { 
    // Issue read operation. 
    if (!ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader)) { 
     if (GetLastError() != ERROR_IO_PENDING)  // read not delayed? 
     // Error in communications; report it. 
     else 
     fWaitingOnRead = TRUE; 
    } 
    else {  
     // read completed immediately 
     HandleASuccessfulRead(lpBuf, dwRead); 
    } 
} 
+0

ipBuf是在調用ReadFile之前應該分配的大小爲READ_BUF_SIZE字節的輸入緩衝區。 dwRead返回在這個調用中實際讀取的字節數。 DW表示DWORD數據類型。 – prabindh

回答

0

簡而言之,Windows API的使讀取和寫入類似串口讀/寫任何基於磁盤的文件(CreateFile/ReadFile/Wri teFile)。

CreateFile實際上用於「打開串行端口」(意思是獲得獨佔訪問),因爲沒有什麼可以真正創建。

ReadFile和WriteFile相當自我解釋。

引起混淆的一個方面是操作模式 - 重疊和非重疊I/O。這些意思分別與異步和同步I/O相同。通常,讀取和寫入串行端口可能需要花費不同的持續時間,具體取決於諸如設備實際可用的數據量或設備是否仍在忙於發送先前要發送的數據等因素。重疊的I/O可以通過使用「事件」在任務完成時向調用線程發回信號來實現有效等待任務。

假設您正在編寫一個Win32應用程序(GUI /控制檯),您希望始終保持應用程序對用戶輸入的響應。這意味着你想要使用多線程,一個線程來處理UI,另一個線程來處理通信。此通信線程可以使用重疊I/O(複雜但CPU使用率更高效)或非重疊I/O(更簡單)。

你可能想看看這個圖書館,聲稱有一個更簡單的界面 http://www.naughter.com/serialport.html。我沒有用過它,因此不能擔保。