大概的程序 单独运行只采集数据时没有出现内存使用量不断增加的情况 只要客户端一请求返回数据 内存使用量就不停的增加 直到程序死了
第一次发问 谢谢
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型数组
} ........
}
程序大概是这样子 我是通过串口读数据 然后在本机显示出来 客户端给我发送请求 我把采集到的数据发回去 是不是我没有释放内存之类的问题 请高手解答 拜托详细一点 谢谢 麻烦各位高手了 急 帮帮忙
第一次发问 谢谢
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型数组
} ........
}
程序大概是这样子 我是通过串口读数据 然后在本机显示出来 客户端给我发送请求 我把采集到的数据发回去 是不是我没有释放内存之类的问题 请高手解答 拜托详细一点 谢谢 麻烦各位高手了 急 帮帮忙
解决方案 »
- 问个问网络编程技术里面的?
- 如何在对话框中嵌入网页
- 二维数组->灰度图>>>绘图问题----
- 请问誰用过JpegLib?为什么我用nmake -f makefile.vc 命令时会输出makefile.vc(11) : fatal error U1052: file 'win32.mak'的错误信息
- 如何在VC里实现一个对话框,如密码框风格,别人看不见你输入的是什么、急,在线等
- 怎样在DLL中访问SQL Server,DLL须能被ASP调用!
- 汇编语言的问题!!
- ATL开发的控件在调整大小的时候闪烁 怎么解决
- 编辑框设置了一个成员变量,要循环给该变量赋值,使编辑框显示所有的数值,而结果只显示了最后一个数据
- 服务端组件可不可以包含vb中的picturebox?
- 清除Edit里的所有内容的函数?
- 线程意外终止的问题
我用的activemq接收数据也有同样的问题,内存增加很厉害。后来把接收的管道改多了就好了。具体原理不明白,猜测是队列积压在内存里面了,处理速度不够快导致部分内存没有回收。你看看这个线索有没有参考价值。
你这个循环加在那里的?如果你线程里面没有阻塞的函数肯定会耗光你的cpu的我记得accept函数是阻塞的啊,你是不是socket为空了?要么你就用一个阻塞的函数放在循环体内
要么你用事件等待,有数据的时候通知线程接收没有的时候就线程挂起等待另外注意一下线程的退出