2014-02-10 62 views
0

我想讀取一個串行端口的傳入數據並處理它們(Windows:native C++)。但我有兩個問題:串行端口:ReadFile和CloseHandle

1 - 我應該在ReadFile把儘可能nNumberOfBytesToRead:

ReadFile(hCom, buffer, nNumberOfBytesToRead, &read, NULL); 

如果我把50首40個字節到達,ReadFile函數將不會返回。因爲它需要10個字節。如果我放1,我的應用程序將不會被優化。什麼是最好的數字?我該怎麼辦?

2-當我想退出我的應用程序時,如果沒有數據通過串口傳入,ReadFile將被鎖定而不返回。所以我無法使用CloseHandle正確關閉它。如何通過串口等待數據時強制ReadFile返回?

+1

http://stackoverflow.com/questions/6036716/serial-comm-using-writefile-readfile –

回答

1

1 - 沒有最好的數字。您最好使用另一種IO策略,例如重疊IO,從端口讀取數據。 Here's some sample code.

2 - 在這種情況下,您可以並應該用CloseHandle調用關閉它。當你這樣做時,在ReadFile或其他阻塞API上阻塞的任何線程(包括剛剛關閉的句柄)都會喚醒接收失敗的結果代碼。

1

當您打開端口時,您應該使用SetCommTimeouts。讀取超時類似於延遲設置:如果傳入數據暫停,則ReadFile在返回之前應等待多長時間。在處理任何事情之前,將緩衝區大小和超時時間設置爲您願意等待的毫秒數。

+0

是的,另一個可行的選擇 - 我已經忘記了這一個。 – Soonts