1。怎样改变一个EXE文件所占用的内存的大小,比如本来是10K的怎样改为1M2。怎样获取一个进程的CPU的使用率3。我想学一学关于操作内存里面的数据的知识,应该看些什么书呢?谢谢

解决方案 »

  1.   

    哦,漏了一问题了,当我重新再装过VC++6。0之后(之前FORMAT了),当再LOAD那些以前写下的程序的时候,发觉在输入API函数的时候没有出现那些提示框,请问知道是什么回事吗
      

  2.   

    想占用内存很容易,你可以做一个空操作.
    比如: int* p=new int[100][100][100]
    程序结束时再释放这部分动态分配的空间.或者就在你的CWinAPP类中增加一个成员变量: int a[100][100][100];看一看 WindowsAPI 中用来操作内存的函数吧
      

  3.   

    CPU的使用率,你需要读取你的进程的进程控制块,每个进程在OS中都会有一个进程控制块,里面有关于你的进程的所有信息,这个进程控制块由 OS 维护, 里面有好多信息只能读取, 不允许修改.
      

  4.   

    当我重新再装过VC++6。0之后(之前FORMAT了),当再LOAD那些以前写下的程序的时候,发觉在输入API函数的时候没有出现那些提示框,请问知道是什么回事吗
    ->删除原工程文件夹里的NCB文件,然后重新打开该工程,就会恢复提示框
      

  5.   

    楼上的有意思,自问自答?我也碰到过,但是有时候删掉NCB也不能,还要关掉VC重开
      

  6.   

    怎样获取一个进程的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);
    }
    }