这段代码运行后为什么假死?解决办法
这段代码运行后为什么假死?
运行这段代码后某CPU核心占用率100%……
------解决方案--------------------
造成死循环的根本原因在于bMore的值永远为true,加不加ProcessMessages没什么意义.
修改为以下即可:
- 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));//获取下一个