c++编译代码使用100% CPU
C++ compiled code using 100% CPU
我有以下代码(它得到所有的进程,然后搜索其中的正则表达式模式,代码为一个更大的个人项目的恶意软件检测),代码做我想要的,但唯一的问题是使用100%的CPU,我做错了什么?内存分配不好?我用MS Visual Studio 2010 (cl.exe/EHsc mycode.cpp)编译了它
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <regex>
using namespace std;
#pragma comment(lib, "psapi.lib")
void PrintProcessNameAndID(DWORD);
void find_locs(HANDLE process);
void ListProcesses();
int main(int argc, char **argv) {
ListProcesses();
}
void find_locs(HANDLE process) {
unsigned char *p = NULL;
MEMORY_BASIC_INFORMATION info;
for ( p = NULL;
VirtualQueryEx(process, p, &info, sizeof(info)) == sizeof(info);
p += info.RegionSize )
{
std::string buffer;
if (info.State == MEM_COMMIT &&
(info.Type == MEM_MAPPED || info.Type == MEM_PRIVATE))
{
DWORD bytes_read;
buffer.resize(info.RegionSize);
ReadProcessMemory(process, p, &buffer[0], info.RegionSize, &bytes_read);
buffer.resize(bytes_read);
const std::tr1::regex rx("([\w-+]+(?:\.[\w-+]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7})");
std::tr1::match_results<std::string::const_iterator> res;
std::tr1::regex_search(buffer, res, rx);
ofstream myfile;
myfile.open ("proc.txt", ios::app);
for (unsigned int i=0; i<res.size(); ++i)
{
std::cout << res[i] << std::endl;
myfile << res[i] << "n";
}
myfile.close();
}
}
}
void ListProcesses()
{
DWORD aProcesses[1024];
DWORD cbNeeded;
DWORD cProcesses;
unsigned int i;
if (!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))
return;
cProcesses = cbNeeded / sizeof(DWORD);
for ( i = 0; i < cProcesses; i++ )
{
PrintProcessNameAndID(aProcesses[i]);
}
}
void PrintProcessNameAndID(DWORD processID)
{
TCHAR szProcessName[MAX_PATH]; // = TEXT("<unknown>");
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
if (NULL != hProcess)
{
HMODULE hMod;
DWORD cbNeeded;
if (EnumProcessModules(hProcess, &hMod, sizeof(hMod),
&cbNeeded))
{
GetModuleBaseName(hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR));
}
}
_tprintf(TEXT("pid: %u file: %sn"), processID, szProcessName);
find_locs(hProcess);
CloseHandle(hProcess);
}
谢谢你的帮助!
程序占用100%的处理器并没有什么错…(我不知道该怎么回答)
任何没有Sleep
调用的连续运行的程序(对操作系统说"我现在完成了")将尝试尽可能快地运行,在前一个循环之后请求下一个循环迭代。它占用每个可用的CPU周期,因为您已经请求它这样做。
几件事:
CPU 100%运行的情况并不少见。在运行计算密集型任务(如素数计算)时尤其如此。如:
如何从C程序中获得100%的CPU使用率
或者,可能更适用于你的情况是,这是由于与windows本身,硬件组合和配置相关的无数事物的组合:
http://www.techradar.com/us/news/computing/why - -我- cpu运行在- 100 - 710254
总之,这没什么好担心的。一般即相关文章:
- 线程SCHED_RR Posix 计时器使用的是 100% CPU
- 通过入门点启动时,Docker容器的100%CPU
- Qtcreator 冻结,CPU 使用率为 100%
- Qt QTableView paint() 事件无限期交付,占用 100% 的 CPU 内核
- Qt QSplitter 和无响应的 GUI (CPU 100%)
- 使用vsync(OpenGL)时CPU利用率为100%
- 我的多线程游戏始终为100%CPU.如何管理线程活动以减少CPU负载
- WinAPI:在WM_PAINT省略 BeginPaint 和 EndPaint 会导致 100% 的 CPU 使用率
- 一段时间后,C++应用程序占用100%的cpu周期
- g_main_loop uses 100% CPU
- boost::asio::async_read在简单示例中使用了100%的CPU
- popen挂起并导致CPU使用率达到100
- 一个简单的pthread_create导致Qt中的CPU使用率达到100%
- 在 XCODE 5 中将 CPU 利用率提高到 100% 以上
- 100% CPU 利用率在 gettimeofday、QTime 或 QLabel->setText
- 为什么我的渲染线程占用了100%的cpu
- C libcurl,限制下载速度-cpu使用率达到100%
- TCP接收使用率100% CPU
- SDL_Renderer使用 100% CPU 和 RAM 来不执行任何操作
- c++编译代码使用100% CPU