// 以下代码为查找系统中是否有某个进程在运行
#include <tlhelp32.h>
BOOL FindProcessByName(char *pProcessName)
{
PROCESSENTRY32 pe;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize = sizeof(PROCESSENTRY32);
if (hSnapshot==NULL)
{
return FALSE;
}
Process32First(hSnapshot,&pe);
do
{
if (strcmp(pProcessName,pe.szExeFile)==0)
{
return TRUE;
}
} while (Process32Next(hSnapshot,&pe));
CloseHandle(hSnapshot);
return FALSE;
}
用CreateToolhelp32Snapshot创建的句柄,调用CloseHandle关闭,资源并没有被完全释放。通过反复调用CreateToolhelp32Snapshot()和CloseHandle(),在任务管理器上查看句柄数量,可证实此问题。