这段代码运行后为什么假死?解决办法

这段代码运行后为什么假死?
C/C++ code

void tp(long pid)
{
HANDLE phandle=OpenProcess(PROCESS_ALL_ACCESS,False,pid);
TerminateProcess(phandle,0);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char pname[2048];
long pid;
strcpy(pname,Edit1->Text.c_str());
PROCESSENTRY32 pe32;
//在使用这个结构前,先设置它的大小   
pe32.dwSize = sizeof(pe32);
//给系统内所有的进程拍个快照   
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"函数调用错误!","错误",MB_OK);
}
BOOL bMore = Process32First(hProcessSnap,&pe32);
while (bMore)
{
if (pe32.szExeFile == pname)
{
pid=pe32.th32ProcessID;
} else {
Process32Next(hProcessSnap,&pe32);
}
}
tp(pid);
CloseHandle(hProcessSnap);
}

运行这段代码后某CPU核心占用率100%……

------解决方案--------------------
造成死循环的根本原因在于bMore的值永远为true,加不加ProcessMessages没什么意义.
修改为以下即可:
C/C++ code
while (bMore)
{
    if (pe32.szExeFile == pname)
    {
        pid=pe32.th32ProcessID;
        break;
    }
    else
    {
        bMore = Process32Next(hProcessSnap,&pe32);
    }
}

------解决方案--------------------
C/C++ code

//得到快照第一个进程信息
    Process32First(hProcessSnap,&pe32);
    do
    {
        if(lstrcmpi(pe32.szExeFile,pname)==0) //比较两个字符串,此比较不区分大小写;
        {
            pid=pe32.th32ProcessID;
            break;
        }
    }while(Process32Next(hProcessSnap,&pe32));//获取下一个