C++ 获取内存使用率,并写入文件

#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include <windows.h>
#include <stdint.h>
#include <tlhelp32.h>
#include <iostream>
#include <vector>
#include <time.h>
#include <fstream>
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
using namespace std;

//获取可用物理内存
DWORD getWin_MemUsage(){
    MEMORYSTATUS ms;
    ::GlobalMemoryStatus(&ms);
    return ms.dwAvailPhys; //返回可用物理内存
}

//获取总物理内存大小
DWORD getWin_MemUsage_all(){
    MEMORYSTATUS ms;
    ::GlobalMemoryStatus(&ms);
    return ms.dwTotalPhys; //返回可用物理内存
}

//获取内存使用率
DWORD getWin_MemUsage_shiyonglv(){
    MEMORYSTATUS ms;
    ::GlobalMemoryStatus(&ms);
    return ms.dwMemoryLoad; //返回可用物理内存
}


char* time_now() //返回当前日期时间
{
    time_t rawtime;
    struct tm *info;
    char buffer[80];

    time(&rawtime);

    info = localtime(&rawtime);

    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info);
    return buffer;
}


DWORD GetProcessIdFromName(string name) //根据进程名称获取进程pid并返回进程pid
{
    HANDLE  hsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hsnapshot == INVALID_HANDLE_VALUE)
    {
        printf("CreateToolhelp32Snapshot Error!\n");
        return 0;
    }
    PROCESSENTRY32 pe;
    pe.dwSize = sizeof(PROCESSENTRY32);

    int flag = Process32First(hsnapshot, &pe);

    while (flag != 0)
    {
        if (strcmp(pe.szExeFile, name.c_str()) == 0)
        {
            return pe.th32ProcessID;
        }
        flag = Process32Next(hsnapshot, &pe);
    }
    CloseHandle(hsnapshot);
    return 0;
}

int KillProcess(int id)   //根据进程ID杀进程
{
    HANDLE hProcess = NULL;
    hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, id);    //打开目标进程
    if (hProcess == NULL) {
        //wprintf(L"\nOpen Process fAiled:%d\n", GetLastError());
        return -1;
    }
    else{
        DWORD ret = TerminateProcess(hProcess, 0);
        // printf("Kill OK!\n");
        if (ret == 0) {
            //   wprintf(L"%d", GetLastError());

        }
    }
    //结束目标进程

    return -1;
}

void write_file(int num)// 写配置文件 传参const char* timenow, int p_id, const char* p_name
{

    ofstream aa;
    aa.open("c:\\123\\test.log", ios::app);
    DWORD keyong = getWin_MemUsage();
    DWORD zongdaxiao = getWin_MemUsage_all();
    DWORD shiyonglv = getWin_MemUsage_shiyonglv();

   // printf("[%s]内存使用情况:使用率:%d%%  可用/总大小: %d //%d \n", time_now(), shiyonglv, keyong, zongdaxiao);

    aa << "[" << time_now() << "]" << "[网络]" << "操作" << "" << num << "次:" << "内存使用率:" << shiyonglv << "%" << "可用/总大小:" << keyong << "//" << zongdaxiao << endl;

    aa.close();
}
void kill()// 读取配置文件
{
 
        int a = GetProcessIdFromName("Hash.exe");
        int b = GetProcessIdFromName("calc.exe");
         KillProcess(a);
         KillProcess(b);
         Sleep(2000);

}



//启动进程测试32位和64位
void  create_process()
{
    WinExec("C:\\MySP\\常用软件\\文件哈希计算\\Hash.exe", SW_SHOWMAXIMIZED);
    Sleep(1500);
    //printf("111111111\n");
    WinExec("C:\\Windows\\System32\\calc.exe", SW_SHOWMAXIMIZED);
    Sleep(1500);
    //printf("111111111\n");
}





int main()
{
    int num = 1;//书写次数
    int cnt = 1; 
    while (1)
    {
        create_process();

        kill();
        Sleep(3000);

        if (num % 10 == 0)
        {        
            
            write_file(num);

        }
        
        num++;
    }
   

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/shenji/p/12584422.html