我用comm控件接收和发送数据的时候,内存占用就会不断增加,但是,如果不用comm.getinput(),直接发送任意数据,内存占用都不会不断增加,而在vb中从来不会出现这样的情况,其中我添加的代码如下:(采用对话框mfc)
在oninitdlg中:
m_com1.SetCommPort(1);
m_com2.SetCommPort(2);  if(m_com1.GetPortOpen()==FALSE)
m_com1.SetPortOpen(TRUE);
 if(m_com2.GetPortOpen()==FALSE)
m_com2.SetPortOpen(TRUE);
m_com1.SetOutput(COleVariant("a"));
SetTimer(1,2,NULL);
timer:
void CDffdsDlg::OnTimer(UINT nIDEvent)
{
COleVariant a=m_com2.GetInput();//COleVariant("ass"));
//m_com1.GetInput());
m_com1.SetOutput(a);//m_com1.GetInput());
}
大家看看这是怎么会事?难道mscomm有bug??还是我自己造成的内存泄漏(但是用工具查不出泄漏)

解决方案 »

  1.   

    我也在用Mscomm控件,SetTimer(1,2,NULL);这句话有问题,SetTimer的精度最多达到55ms,小于的话会丢失,如需要短时间的话要用多媒体定时器。
      

  2.   

    高手们,说一下用这个控件的感受吧.
    我现在要作一个串口通信的监控程序,监控电机的转速.
    听说串口通信有几种方法
    内联汇编
    api
    或mscom
    哪个好用?
      

  3.   

    去download一个串口类好点。
    其实也就是CreateFile("com1"....)打开串口,WriteFile,ReadFile读写串口,CloseFile()关闭串口。
      

  4.   

    在另外一个程序中我是直接用一个循环查询的,没有用timer也有这样的问题,大家可以试试:)
    我看还是去下载一个控件好了:),自己写了一个,不太好用,异步处理不知怎么弄才好
      

  5.   

    1。内联汇编用的很少,用_inp和 _outp两个函数。
    2。mscom控件最容易上手,很简单。
    3。api最灵活,异步处理主要是ouerlapper结构。
    4。或者down一个CSerialPort 类
    要作一个串口通信的监控程序,监控电机的转速.根据你的情况推荐使用mscom控件。
      

  6.   

    最后我用了api来实现,没有办法,看来微软的东西还是有许多我们不知道的错误的地方,也许是invoke的问题,谁知道!反正已经解决了
      

  7.   

    你是如何解决的,请指教
    [email protected]