大概的程序 单独运行只采集数据时没有出现内存使用量不断增加的情况 只要客户端一请求返回数据 内存使用量就不停的增加 直到程序死了
第一次发问 谢谢
UINT thread(LPVOID p)
{
//
char buff[1000]; int s = 1;
CTestDlg* dlg = (CTongDlg*)AfxGetApp()->GetMainWnd(); dlg->msgsock = accept(dlg->sock,(sockaddr*)&(dlg->their_addr),&(dlg->addlen));
s = recv(dlg->msgsock,buff,100,0); CString str_recv(buff);
CString strUser;
CString strPass;

int i = str_recv.Find(strPart);
int i2 = str_recv.Find(strPart,i+2);
int i3 = str_recv.Find(strPart,i2+2);
int i4 = str_recv.Find(strPart,i3+2);
strUser = str_recv.Mid(i+2,i2-i-2);
strPass = str_recv.Mid(i2+2,i3-i2-2);
if(strUser == "3" && strPass == "3" )
{
CString str; str.Format("%f",dlg->m_f);
send(dlg->msgsock,str,str.GetLength(),0);
}
AfxBeginThread(thread,0);
// AfxEndThread(0); return 0;
}CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
{
}BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog(); if(m_COM.GetPortOpen())
{
m_COM.SetPortOpen(FALSE);
}
m_COM.SetCommPort(6);
m_COM.SetInputMode(1); //1:表示以二进制方式检取数据
m_COM.SetRThreshold(1); 
if(bind(sock,(sockaddr*)&serv,addlen))
{
AfxMessageBox("绑定失败");  }
else
{
// AfxMessageBox("服务器创建成功");
int i = listen(sock,20); 
AfxBeginThread(&thread,0);
}}
void CTongDlg::OnCommMscomm() 
{
UpdateData(TRUE);//取控件z的数据
switch(m_COM.GetCommEvent()) 

case 1: //comEvSend事件 
{
//如有数据要发送,可采用以下代码:
//::AfxMessageBox("发送数据");
// OnSend();
break; 
}

case 2: //comEvReceiv事件,有数据到达 
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len = 0, k = 0;//, j = 0, len2 = 0;
BYTE rxdata[1047];//设置BYTE数组 An 8-bit integerthat is not signed.
//CString strtemp;
variant_inp=m_COM.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k = 0; k < len; k++)
{
safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组
}                        ........
}
程序大概是这样子 我是通过串口读数据 然后在本机显示出来 客户端给我发送请求 我把采集到的数据发回去 是不是我没有释放内存之类的问题 请高手解答 拜托详细一点 谢谢 麻烦各位高手了 急 帮帮忙 

解决方案 »

  1.   

    实在找不到地方,就用第三方的工具查查吧,比如BoundChecker。
      

  2.   

    用工具扫描一下代码... BoundsCheck
      

  3.   

    BoundChecker 我安装后出现找不到BCAuto.dll文件的警告 然后打开工程时就出现非法操作 问题很困扰我 谢谢各位回答 再帮我检查检查 是不是我线程启动多了没关?
      

  4.   

    把你thread中的AfxBeginThread(thread,0); 用while(1)代替试一下,你那样写不太合理
      

  5.   

    程序退出的时候,在外面TerminateThread
      

  6.   

    用个笨点的办法,把变量的地址放到内存监视窗口里,一直盯着,看那些内存没释放。
    我用的activemq接收数据也有同样的问题,内存增加很厉害。后来把接收的管道改多了就好了。具体原理不明白,猜测是队列积压在内存里面了,处理速度不够快导致部分内存没有回收。你看看这个线索有没有参考价值。
      

  7.   

    我用while(1)的方法加到了thread里后 CPU的使用率就一直在100% 内存倒是不增加了.....
      

  8.   


    你这个循环加在那里的?如果你线程里面没有阻塞的函数肯定会耗光你的cpu的我记得accept函数是阻塞的啊,你是不是socket为空了?要么你就用一个阻塞的函数放在循环体内
    要么你用事件等待,有数据的时候通知线程接收没有的时候就线程挂起等待另外注意一下线程的退出