C++测试用的一些类

本文介绍了在C++中使用`struct_stopwatch`实现计时功能,以及`memory_monitor`类用于实时监控并记录进程内存使用的示例。通过线程和定时器,该程序可以周期性获取并比较内存使用情况。
摘要由CSDN通过智能技术生成

计时器

#include <ctime>

struct _stopwatch {
	size_t t = clock();
	void reset() { t = clock(); }
	operator size_t() {
		return clock() - t;
	}
};

内存监控


#define NOMINMAX

#include <iostream>
#include <windows.h>
#include <psapi.h>
#include <thread>
#include <limits>

inline SIZE_T getMemory() {
	HANDLE process = GetCurrentProcess();
	PROCESS_MEMORY_COUNTERS_EX pmc;
	if (GetProcessMemoryInfo(process, reinterpret_cast<PROCESS_MEMORY_COUNTERS*>(&pmc), sizeof(pmc))) {
		SIZE_T virtualMemUsedByMe = pmc.PrivateUsage;
		return virtualMemUsedByMe;
	}
	else {
		std::cout << "Failed to get process memory info." << std::endl;
	}

	return 0;
}


class memory_monitor {
public:
	memory_monitor(): stop_(true), min_(0), max_(0){}
	~memory_monitor() {
		stop_ = true;
		t.join();
	}
	void start(int period = 200) {
		stop_ = false;
		min_ = std::numeric_limits<SIZE_T>::max();
		max_ = std::numeric_limits<SIZE_T>::min();
		t = std::thread([&]() {
			while (!stop_) {
				auto mem_size = getMemory();
				
				min_ = (std::min)(min_, mem_size);
				max_ = (std::max)(max_, mem_size);

				std::this_thread::sleep_for(std::chrono::milliseconds(period));
			}
		});

	}
	SIZE_T stop() {
		stop_ = true;
		t.join();

		return max_ - min_;
	}
private:
	bool stop_;
	std::thread t;
	SIZE_T min_, max_;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值