首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++资源释放解决办法

2013-11-13 
c++资源释放//查找进程是否正在执行BOOL FindProcess(){int i0PROCESSENTRY32 pe32pe32.dwSize sizeo

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;
}

热点排行