工作中串列埠讀寫同步方式下的效率優化記錄事件

2021-07-24 23:00:42 字數 1277 閱讀 3632

工作中的專案使用串列埠的資料提供樣機是同步方式的,以前主要用了非同步方式的編碼;對同步方式的編碼沒有自己的研究,只是先讓可以工作。

但是在實際工作中發現讀取的效率有問題:於是自己研究了這部分**發現找的別人的例子**是有大問題的。

暫時記錄一下:

bool cdjcom::comread(lpbyte buf, int &len)

rtn = readfile(m_hcom, buf, 1, &readsize, null);

//如果是超時rtn=true但是readsize=0,如果有資料到達,會讀取乙個位元組readsize=1

if (rtn == true && 1 == readsize)

;int readlen = 0;

//查詢剩餘多少位元組未讀取,儲存於cs.cbinque中

clearcommerror(m_hcom, &error, &cs);

readlen = (cs.cbinque > len) ? cs.cbinque:len;

if (readlen > 0)}}

purgecomm(m_hcom, purge_rxabort|purge_txclear|purge_rxclear|purge_txabort);

return rtn != false;

}實際上同步操作com口,讀寫交叉進行就可以了。這個上面的讀取方法,先是試讀乙個位元組,如果讀取到就使用clearcommerror(m_hcom, &error, &cs);readlen = (cs.cbinque > len) ? cs.cbinque:len;查詢剩餘多少位元組未讀取,得到這個未讀取的剩餘位元組後,再按照這位元組數進行讀取;這之後測試讀取成功後,還要和之前讀取的資料挨著順序存放讀取。

明顯這裡面的操作就降低了速度。

在讀取com資料的時候,一種是讀取到獲取的資料量方法返回,另一種是讀取不到要讀取的數量而超時返回;

所以,在需要對串列埠讀取的時候,直接去讀就可以了。

在優化**之後,直接用讀取特定數量(由於工作中的協議返回的是固定長度,我在**中直接使用要讀取的固定長度)立即返回,大大提高了讀取速度。

這個讀取com的效率問題:其實不應該存在的,同步的操作讀寫本來就很簡單。而我因為兩年後,再使用串列埠操作,就直接用了別人現成的同步讀取,在使用過程中發現有這個效率問題,所以就有了這個記錄。

同步讀取的具體的效率還需要新增**進行詳細的統計,但是相比之前的操作:寫了資料後,需要等待14-50毫秒的間隔再讀操作(之前不等待就會出錯,時間越短,出錯概率越大),現在直接不需等待時間,就直接讀操作還幾乎沒有出錯的情況觀察到,那真是很大的提高效率。

工作中mybatis的使用方式

1.傳統的statementid的方式,如 先確定statementid全限定名 final string statementid com.ashin.people.selectstudentbyid people people sqlsession.selectone statementid,4 ...

工作中怎麼用高效率時間管理的工具?

隨著經濟社會發展的加快,很多上班族也發現自己的工作節奏也逐漸變快了,每天要處理的事情變得越來越多,於是不少上班族需要在有限的工作時間內完成更多的工作任務,否則就需要下班後繼續留下來加班了。想要完成高效率的工作,就要學會做好時間管理了,上班族在進行時間管理的時候,除了可以運用一些番茄時鐘工作法 二八法...

工作筆記 工作中需要注意的細節的處理方式

1 在寫dom的時候需要注意一點是dom的書寫方式 a b a和b的區別是name的屬性值有問題,a的屬性值中不存在空格,b的屬性值中存在空格,有空格的不能在ajax傳輸中正確使用,會出現報錯 2 trim value 這個jquery的方法很好用,有的時候查詢功能需要用到,也就是說需要把查詢的關鍵...