#include <thread>
#include <memory>
#include <Windows.h>
#include <Psapi.h>
#pragma comment(lib , "psapi.lib")
class MemoryWatcher
{
public:
MemoryWatcher();
~MemoryWatcher();
private:
static void RunFunc(void* param);
void Run();
bool bWantStop = false;
HANDLE m_hProcess;
PROCESS_MEMORY_COUNTERS pmc;
std::shared_ptr<std::thread> m_thread;
};
void MemoryWatcher::RunFunc(void* param)
{
MemoryWatcher* watcher = static_cast<MemoryWatcher*>(param);
watcher->Run();
}
void MemoryWatcher::Run()
{
while (!bWantStop)
{
GetProcessMemoryInfo(m_hProcess, &pmc, sizeof(pmc));
printf("当前内存占用:%dMB 峰值内存占用:%dMB\n", pmc.WorkingSetSize >> 20, pmc.PeakWorkingSetSize >> 20);
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
MemoryWatcher::MemoryWatcher()
{
m_hProcess = GetCurrentProcess();
m_thread = std::make_shared<std::thread>(RunFunc, this);
}
MemoryWatcher::~MemoryWatcher()
{
bWantStop = true;
m_thread->join();
}
int main(int argc, char** argv) {
std::shared_ptr<MemoryWatcher> watcher = std::make_shared<MemoryWatcher>();
getchar();
return 0;
}