请问一些关于内存和CPU的问题 1。怎样改变一个EXE文件所占用的内存的大小,比如本来是10K的怎样改为1M2。怎样获取一个进程的CPU的使用率3。我想学一学关于操作内存里面的数据的知识,应该看些什么书呢?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哦,漏了一问题了,当我重新再装过VC++6。0之后(之前FORMAT了),当再LOAD那些以前写下的程序的时候,发觉在输入API函数的时候没有出现那些提示框,请问知道是什么回事吗 想占用内存很容易,你可以做一个空操作.比如: int* p=new int[100][100][100]程序结束时再释放这部分动态分配的空间.或者就在你的CWinAPP类中增加一个成员变量: int a[100][100][100];看一看 WindowsAPI 中用来操作内存的函数吧 CPU的使用率,你需要读取你的进程的进程控制块,每个进程在OS中都会有一个进程控制块,里面有关于你的进程的所有信息,这个进程控制块由 OS 维护, 里面有好多信息只能读取, 不允许修改. 当我重新再装过VC++6。0之后(之前FORMAT了),当再LOAD那些以前写下的程序的时候,发觉在输入API函数的时候没有出现那些提示框,请问知道是什么回事吗->删除原工程文件夹里的NCB文件,然后重新打开该工程,就会恢复提示框 楼上的有意思,自问自答?我也碰到过,但是有时候删掉NCB也不能,还要关掉VC重开 怎样获取一个进程的CPU的使用率?BOOL DebugPrivilege(BOOL bEnable){ BOOL bResult = TRUE; HANDLE hToken; TOKEN_PRIVILEGES TokenPrivileges; char szTempBuf[MAXBUFSIZE]; if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0) { sprintf(szTempBuf, "OpenProcessToken Error: %d\n",GetLastError()); AfxMessageBox(szTempBuf); bResult = FALSE; } TokenPrivileges.PrivilegeCount = 1; TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0; LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid); AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL); if(GetLastError() != ERROR_SUCCESS) { bResult = FALSE; } CloseHandle(hToken); return bResult;}BOOL GetCpuUsage(char* szExeName, char* szTempBuf){ BOOL bResult; HANDLE hProcessSnap; PROCESSENTRY32 ProcessEntry32; HANDLE hProcess; FILETIME CreateTime; FILETIME ExitTime; FILETIME KernelTime; FILETIME UserTime; FILETIME CPUTime; SYSTEMTIME SystemTime; DWORD dwSize; DWORD dwName; DWORD dwDomain; BOOL bFind = FALSE; ASSERT(szTempBuf!=NULL); bResult = TRUE; hProcessSnap = NULL; memset(szTempBuf, 0x00, sizeof(szTempBuf)); //提升进程权限 DebugPrivilege(TRUE); hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hProcessSnap == INVALID_HANDLE_VALUE) { printf("CreateToolhelp32Snapshot for Process Error: %d\n",GetLastError()); bResult = FALSE; } ProcessEntry32.dwSize = sizeof(PROCESSENTRY32); if(Process32First(hProcessSnap,&ProcessEntry32)) { do { if(ProcessEntry32.th32ProcessID == 0) //进程ID { continue; } if(ProcessEntry32.szExeFile == szProcName) //进程可执行程序名 { bFind = TRUE; break; } } while(Process32Next(hProcessSnap,&ProcessEntry32)); if(!bFind) //没有找到匹配进程 { sprintf(szTempBuf, "Cannot find the process: %s", szExeName); bResult = FALSE; goto END; } //打开特定进程,以查询进程相关信息; hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessEntry32.th32ProcessID); if(hProcess == NULL) { continue; } if(!GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime)) //查询占用CPU时间 { sprintf(szTempBuf, "GetProcessTimes Error: %d",GetLastError()); bResult = FALSE; } else { CPUTime.dwHighDateTime = KernelTime.dwHighDateTime + UserTime.dwHighDateTime; CPUTime.dwLowDateTime = KernelTime.dwLowDateTime + UserTime.dwLowDateTime; FileTimeToSystemTime(&CPUTime,&SystemTime); sprintf(szTempBuf, "%.2d:%.2d:%.2d",SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond); //这时szTempBuf里的就是cpu占用了 } } else { sprintf(szTempBuf, "ProcessEntry32First Error: %d",GetLastError()); bResult = FALSE; }END: CloseHandle(hProcessSnap); //恢复进程权限 DebugPrivilege(FALSE); return bResult;}调用:void TestFun(){ char szTempBuf[1000] = {0}; char szExeName[255] = {0}; if(GetCpuUsage(szExeName, szTempBuf)) { //success printf("CPU Usage of %s is: %s\n", szExeName, szTempBuf); } else { //failed printf("Get CPU usage of %s failed: %s\n", szExeName, szTempBuf); }} 大家帮我看看这个MFC程序呗!!!(本来想画变化的环,结果总是不对称) VC显示数据列表问题 求2个函数 本人想学习vc6和sql server数据库连接? 为什么某些网页没有事件? 我可以在同一个namedPipe上用一个读线程和一个写线程同时读写么 为什么用StretchDIBits无法显示出图象? 求下联:此木为柴山山出 vc 图像处理 菜鸟求教 为什么有时侯在WATCH里面跟踪不到变量的值,显示如下图片所示 请教:mp3文件格式 请看一下为什么这段代码打印不出图形?
比如: int* p=new int[100][100][100]
程序结束时再释放这部分动态分配的空间.或者就在你的CWinAPP类中增加一个成员变量: int a[100][100][100];看一看 WindowsAPI 中用来操作内存的函数吧
->删除原工程文件夹里的NCB文件,然后重新打开该工程,就会恢复提示框
{
BOOL bResult = TRUE;
HANDLE hToken;
TOKEN_PRIVILEGES TokenPrivileges;
char szTempBuf[MAXBUFSIZE];
if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0)
{
sprintf(szTempBuf, "OpenProcessToken Error: %d\n",GetLastError());
AfxMessageBox(szTempBuf);
bResult = FALSE;
}
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid);
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
if(GetLastError() != ERROR_SUCCESS)
{
bResult = FALSE;
}
CloseHandle(hToken);
return bResult;
}BOOL GetCpuUsage(char* szExeName, char* szTempBuf)
{
BOOL bResult;
HANDLE hProcessSnap;
PROCESSENTRY32 ProcessEntry32;
HANDLE hProcess;
FILETIME CreateTime;
FILETIME ExitTime;
FILETIME KernelTime;
FILETIME UserTime;
FILETIME CPUTime;
SYSTEMTIME SystemTime;
DWORD dwSize;
DWORD dwName;
DWORD dwDomain;
BOOL bFind = FALSE; ASSERT(szTempBuf!=NULL);
bResult = TRUE;
hProcessSnap = NULL; memset(szTempBuf, 0x00, sizeof(szTempBuf));
//提升进程权限
DebugPrivilege(TRUE);
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot for Process Error: %d\n",GetLastError());
bResult = FALSE;
} ProcessEntry32.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&ProcessEntry32))
{
do
{
if(ProcessEntry32.th32ProcessID == 0) //进程ID
{
continue;
}
if(ProcessEntry32.szExeFile == szProcName) //进程可执行程序名
{
bFind = TRUE;
break;
}
}
while(Process32Next(hProcessSnap,&ProcessEntry32));
if(!bFind) //没有找到匹配进程
{
sprintf(szTempBuf, "Cannot find the process: %s", szExeName);
bResult = FALSE;
goto END;
}
//打开特定进程,以查询进程相关信息;
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessEntry32.th32ProcessID);
if(hProcess == NULL)
{
continue;
} if(!GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime)) //查询占用CPU时间
{
sprintf(szTempBuf, "GetProcessTimes Error: %d",GetLastError());
bResult = FALSE;
}
else
{
CPUTime.dwHighDateTime = KernelTime.dwHighDateTime + UserTime.dwHighDateTime;
CPUTime.dwLowDateTime = KernelTime.dwLowDateTime + UserTime.dwLowDateTime;
FileTimeToSystemTime(&CPUTime,&SystemTime);
sprintf(szTempBuf, "%.2d:%.2d:%.2d",SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond);
//这时szTempBuf里的就是cpu占用了
} }
else
{
sprintf(szTempBuf, "ProcessEntry32First Error: %d",GetLastError());
bResult = FALSE;
}END:
CloseHandle(hProcessSnap);
//恢复进程权限
DebugPrivilege(FALSE);
return bResult;
}
调用:
void TestFun()
{
char szTempBuf[1000] = {0};
char szExeName[255] = {0};
if(GetCpuUsage(szExeName, szTempBuf))
{
//success
printf("CPU Usage of %s is: %s\n", szExeName, szTempBuf);
}
else
{
//failed
printf("Get CPU usage of %s failed: %s\n", szExeName, szTempBuf);
}
}