读书人

c++资源释放解决办法

发布时间: 2013-11-13 14:04:18 作者: rapoo

c++资源释放
//查找进程是否正在执行
BOOL FindProcess()
{
int i=0;
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
i+=0;
}
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
while(bMore)
{
//printf(" 进程名称:%s \n", pe32.szExeFile);
//MessageBox(pe32.szExeFile);
if(stricmp("进程名称",pe32.szExeFile)==0)
{
i+=1;
}
bMore = ::Process32Next(hProcessSnap, &pe32);
}

if(i>0)
{
//大于1,排除自身
return true;
}else
{
return false;
}
}
如上这段代码,如果while循环里调用,几分钟电脑内存就占满了,提示错误!!如何在while循环里每一次调用的时候释放资源???
[解决办法]
CloseHandle 在函数返回前调用, 以释放hProcessSnap.

多看MSDN说明, 每个分配函数都是有说明的.
[解决办法]

BOOL FindProcess()
{
PROCESSENTRY32 pe32;
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE) {
return false;
}
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
while(bMore) {
//printf(" 进程名称:%s \n", pe32.szExeFile);
//MessageBox(pe32.szExeFile);
if(stricmp("进程名称",pe32.szExeFile)==0) {
CloseHandle(hProcessSnap);
return true;
}
bMore = ::Process32Next(hProcessSnap, &pe32);
}
CloseHandle(hProcessSnap);
return false;
}

读书人网 >C++

热点推荐