[C++]プロセスで使用中のメモリ使用量を出力

現在のプロセスのメモリ使用量を出力する機会があったのでメモを残す。

事前準備としてpsapi.libをリンクしておくこと。

#include <Windows.h>
#include <Psapi.h>

…

HANDLE hProce = GetCurrentProcess();
PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(
  hProc,
  (PROCESS_MEMORY_COUNTERS*)&pmc,
  sizeof(hProc)
)
CloseHandle(hProc);

…

sprintf("%s\n",pmc.PrivateUsage);

 

[C++]Ping疎通確認するサンプル

ヘッダーファイル(icmp.hpp)

#pragma once
#include <stdio.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <iphlpapi.h>
#include <IcmpAPI.h>
class ICMP
{
public:
    ICMP();
    ~ICMP();
    int Ping(const char *HostAddress);
protected:
    HANDLE hIcmp;
    char *SendData = "ICMP";
    LPVOID ReplyBuffer;
    DWORD dwRetVal;
    DWORD buflen;
    PICMP_ECHO_REPLY pIcmpEchoReply;
    sockaddr_in addr;
    const char *HostAddress;
};

 

ソースファイル(icmp.cpp)

#include "icmp.hpp"
ICMP::ICMP()
{
    hIcmp = IcmpCreateFile();
    buflen = sizeof(ICMP_ECHO_REPLY) + strlen(SendData) + 1;
    ReplyBuffer = (VOID*)malloc(buflen);
}
int ICMP::Ping(const char *HostAddress)
{
    if (ReplyBuffer == NULL)
    {
        return 1;
    }
    memset(ReplyBuffer, 0, buflen);
    pIcmpEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer;
    dwRetVal = IcmpSendEcho(hIcmp,
        InetPton(AF_INET, HostAddress, &addr.sin_addr.S_un.S_addr),
        SendData,
        strlen(SendData),
        NULL,
        ReplyBuffer,
        buflen,
        1000);
    if (dwRetVal != 0)          //PING成功
    {
        return 0;
    } else {
        return 1;
    }
}
ICMP::~ICMP()
{
    free(ReplyBuffer);
    IcmpCloseHandle(hIcmp);
}