我嘗試寫一個高性能的串口軟體,串口速度可以,但時間全部浪費在字串添加到編輯框控制元件上了,也嘗試另開一個執行緒來單獨處理顯示,但還是很卡,我是用的對話框CEit Box控制元件作為接收窗顯示。除了顯示速度慢跟不上之外,當串口收到30000個字符以后,編輯框就停止顯示了,太詭異了,但是串口計數還是繼續增加。我用過的串口軟體里面,SSCOM(聶小孟 丁丁)的串口字串顯示速度極快,而且串口資料很大也不會丟包。想知道他是怎么實作的,這些問題希望有大神能給解決一下,代碼如下:
rxdatacount++; //該變數用于接收字符計數
CString strTemp;
strTemp.Format("%ld",rxdatacount);
strTemp="接收:"+strTemp;
m_static_receive_contr.SetWindowText(strTemp); //顯示接收計數
//傳入引數ch就是傳進來的字符型資料,可以使用的資料
//檢查是否十六進制顯示
if(m_check_hex16_disp.GetCheck())
strTemp.Format("%02X ",ch);
else
strTemp.Format("%c",ch);//將字符送入臨時變數strtemp存放
// m_string_receive += strTemp;//將接收到的字符加到字串
// SetDlgItemText(IDC_EDIT_RECEIVE,m_string_receive);//更新顯示
// UpdateData(FALSE); //更新顯示,作用同上一行,此函式也可以放在定時器中執行
/*********************************以下是接收框字串顯示的程式*****************************/
//以下程式作用是不斷將接收到的字串資料添加到接收框的末尾,省去了不斷重繪的煩惱
m_edit_receive_data.SetSel(-1, -1);//選中編輯框中的文本,-1,-1表示選中的是最后一行
m_edit_receive_data.ReplaceSel(strTemp);//替換文本
// if (nLen>28000)//清空編輯框
{
// m_string_receive.Empty();
// UpdateData(FALSE);
}//*/
//獲取編輯框內文本行數
int line_count;
line_count=m_edit_receive_data.GetLineCount();
/* //消除部分行,防止螢屏最長字串溢位
if (line_count>200)//或者nLen>10000
{
int line_length=m_edit_receive_data.LineLength(1);//獲取第一行長度
m_edit_receive_data.SetSel(0, (10*line_length));//選中編輯框一行
m_edit_receive_data.ReplaceSel("");
//滾動
line_count= m_edit_receive_data.GetLineCount();
m_edit_receive_data.LineScroll(line_count, 0);
}//*/
//顯示行數
strTemp.Format("%ld",line_count);
strTemp="行數:"+strTemp;
m_static_receive_line_count.SetWindowText(strTemp); //顯示接收計數
uj5u.com熱心網友回復:
自己頂頂!!!uj5u.com熱心網友回復:
這肯定不行啊,你時間都花在了str = str + 新字串上了。每次只顯示要顯示的,推薦用richedit,
用setsel( -1, -1 ),將游標設定到最后,然后replacesel( 增加串 )
uj5u.com熱心網友回復:
看錯了,做法一樣,先換成richedit吧。uj5u.com熱心網友回復:
試試這個例子:http://blog.csdn.net/cvbtvbwu/article/details/24694739uj5u.com熱心網友回復:
1、使用“事件”觸發方式處理串口通訊(異步)2、使用執行緒處理顯示
3、通信、處理、顯示分別使用獨立執行緒
uj5u.com熱心網友回復:
接收資料后不要立即就去顯示,先保存到記憶體的緩沖區中,當沒有資料接識訓者空閑時,或者緩沖區滿時,再一次性顯示出來。uj5u.com熱心網友回復:
文本框的資料達到一定數量時,顯示速度是會變慢甚至是停頓方法1: 顯示超過一定數量時,把開頭的一部分資料移除
方法2: 用Frame/View框架, 在View中通過TextOut輸出字串。串口一般只有英文,顯示和選中效果什么的都不難做
方法3: 用CWnd自繪,通過TextOut輸出字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/139854.html
標籤:基礎類
上一篇:圖片的RAW檔案格式轉RGB
下一篇:Orcl資料中查詢日期欄位
