我使用的是sun提供的javax.comm包,不確定其他的comm支持包(比如:rxtx)行為與之相同
1、事件驅動的數據讀取
需要注意的是:一個SerialPort只能注冊一個事件監聽程序,因此,有時候有會發現,你的事件監聽處理程序會變得非常龐大
另外,要注意的就是事件處理如果比較耗時的話,最好是在單獨的線程中運行,否則會阻塞數據的接收。
串口接收到數據后,默認在線程: Win32SerialPort Notification thread中運行。如果不及時釋放的話,會造成數據無法讀取。
我的做法是,接收到數據后,先判斷數據的合法和完整性,如果沒有接收到完整的數據,則在緩存數據后,馬上返回
如果數據完整而且合法,則另開一個線程,進行數據處理
2、數據的發送
建議單獨使用一個線程來發送數據,目的還是為了防止阻塞,有一個技巧就是使用OUTPUT_BUFFER_EMPTY事件來發送。