hur.cn - 华软网

 热门搜索

串口编程的问题

  作者:未知    来源:网络    更新时间:2011/6/10
部分代码如下:
void CSerialPortView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();

OpenSerialPort(0););//自定义函数,打开COM1
//启动串口监视线程
hThread = CreateThread(NULL,0,SerialPortThreadProcess,(LPVOID)this,0,NULL);
}

DWORD WINAPI SerialPortThreadProcess( LPVOID lParam ) //主窗口句柄
{  
         char str[100];
         memset(str,'\0',100);
         DWORD wCount=100; //读取的字节数
         CSerialPortView * pView = (CSerialPortView *)lParam;

         ReadFile(hCom,str,wCount,&wCount,&m_osRead);
//       pView->print(str);
         pView->PostMessage( COM_RECVDATA, (unsigned int) str, wCount);
         return true;
}

void CSerialPortView::OnRecvData(WPARAM wParam, LPARAM lParam)
{
CString recvStr((char *)wParam); 
m_strRecv += recvStr; 
UpdateData(false); 
}

void CSerialPortView::print(CString strPrint)
{
         m_strRecv+=strPrint;
         UpdateData(FALSE);
}

运行时出现cpu100%的情况,可是又不能应用pView->print(str);来进行接收消息显示
应该怎么解决呢?谢谢


---华软 网友回答---
我对自己直接使用API的不熟,不过可以推荐你用三方类 非常简单好用,如果你非要自己写也可以参考里面的写法
CSerialPort
codeproject上有的下
---华软网友回复---
DWORD WINAPI SerialPortThreadProcess( LPVOID lParam ) //主窗口句柄
{   
  char str[100];
  memset(str,'\0',100);
  DWORD wCount=100; //读取的字节数
  CSerialPortView * pView = (CSerialPortView *)lParam;

  ReadFile(hCom,str,wCount,&wCount,&m_osRead);
// pView->print(str);
  pView->PostMessage( COM_RECVDATA, (unsigned int) str, wCount);
  return true;
}
把 str改静态或全局变量,否则进入void CSerialPortView::OnRecvData(WPARAM wParam, LPARAM lParam)的时候这个变量已经不存在,你访问的是无效指针。
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。