各位大神好,
最近用MScomm做串口通訊,需要實時的獲取一些引數來進行控制,但是按照事件回應的方法,測驗過接收資料的時間居然達到了35ms,這對我的程式來說是嚴重滯后的。有什么其他辦法能加快速度嗎?
在線等啊!!!!!
代碼的主要部分:
初始化:
if(m_cComm1.get_PortOpen())
m_cComm1.put_PortOpen(FALSE);
m_cComm1.put_CommPort(11);
m_cComm1.put_InputMode(1);
m_cComm1.put_InBufferSize(1024); //設定輸入緩沖區
m_cComm1.put_OutBufferSize(512); //設定輸出緩沖區
m_cComm1.put_Settings(_T("9600,n,8,1"));//波特率,無校驗,個資料位,個停止位
if(!m_cComm1.get_PortOpen())
{
m_cComm1.put_PortOpen(TRUE); //打開串口
m_cComm1.put_RThreshold(1); //每當接識訓沖區有個字符則接收串口資料
m_cComm1.put_InputLen(0); //設定當前緩沖區長度為
m_cComm1.get_Input(); //預讀緩沖區以清除殘留資料
}
else
AfxMessageBox("打開埠失敗!",MB_ICONSTOP,0);
事件處理:
VARIANT variant_inp2;
COleSafeArray safearray_inp2;
long len2,k2;
byte rxdata2[512]; //設定BYTE陣列
CString strtemp2;
//m_strRecvData2.Empty();
if(m_cComm2.get_CommEvent()==2) //值為表示接識訓沖區內有字符
{
variant_inp2=m_cComm2.get_Input(); //讀緩沖區訊息
safearray_inp2=variant_inp2; ///變數轉換
len2=safearray_inp2.GetOneDimSize(); //得到有效的資料長度
for(k2=0;k2<len2;k2++)
safearray_inp2.GetElement(&k2,rxdata2+k2);
for(k2=0;k2<len2;k2++) //將陣列轉換為CString型變數
{
char bt=*(char*)(rxdata2+k2); //字符型
strtemp2.Format("%c",bt); //將字符送入臨時變數strtemp存放
m_strRecvData2+=strtemp2; //加入接收編輯框對應字串
}
}
CString temp=""; //顯示完成后要自動換行
m_strRecvData2+=temp;
UpdateData(FALSE); //更新編輯框內容
uj5u.com熱心網友回復:
用阻塞模式實時收,事件模式很多要等積累到一定資料才觸發uj5u.com熱心網友回復:
不行就別用控制元件了,直接用檔案IO的方式,采用異步IO模式,應該可以提高回應速度uj5u.com熱心網友回復:
接受一個byte產生一個事件,事件函式里只保存當前接受到的字串,由其他的執行緒處理字串uj5u.com熱心網友回復:
MScomm 控制元件好像問題多多,建議使用API自己寫一個串口uj5u.com熱心網友回復:
第一、Windows本身就不是實時系統第二、串口本身就不是高速通訊介面
第三、就你上面的代碼要加速:提高通訊速率到115200、直接讀寫IO
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/156768.html
標籤:基礎類
上一篇:Borland C++ Builder Memo控制元件獲取游標位置所在單詞
下一篇:關于一個dll如何呼叫的新手問題
