Добавлена реализация для Windows

This commit is contained in:
re.kovalev 2021-07-16 13:27:54 +03:00
parent 74cdbd9401
commit c1089b4806
2 changed files with 31 additions and 6 deletions

View File

@ -4,7 +4,9 @@
/*Статическое поле класса Memorator*/ /*Статическое поле класса Memorator*/
#ifdef __linux__ #ifdef __linux__
sysinfo Memorator::info; struct sysinfo Memorator::info;
#elif _WIN32
MEMORYSTATUSEX Memorator::statex;
#endif #endif
/*Заполняет поле с информацией класса Memorator данными от системы*/ /*Заполняет поле с информацией класса Memorator данными от системы*/
@ -12,15 +14,22 @@ void Memorator::ask()
{ {
#ifdef __linux__ #ifdef __linux__
sysinfo(&info); sysinfo(&info);
#elif _WIN32
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx(&statex);
#endif #endif
} }
/*Возвращает общее кол-во памяти в байтах*/ /*Возвращает общее кол-во памяти в байтах*/
unsigned long Memorator::getTotalRam_B() unsigned long Memorator::getTotalRam_B()
{ {
#ifdef __linux__
ask(); ask();
return info.totalram; #ifdef __linux__
return info.totalram;
#elif _WIN32
return statex.ullTotalPhys;
#else
return 0;
#endif #endif
} }
@ -39,9 +48,13 @@ unsigned long Memorator::getTotalRam_MB()
/*Возвращает общее кол-во свободной памяти в байтах*/ /*Возвращает общее кол-во свободной памяти в байтах*/
unsigned long Memorator::getFreeRam_B() unsigned long Memorator::getFreeRam_B()
{ {
#ifdef __linux__
ask(); ask();
#ifdef __linux__
return info.freeram; return info.freeram;
#elif _WIN32
return statex.ullAvailPhys;
#else
return 0;
#endif #endif
} }
@ -60,9 +73,13 @@ unsigned long Memorator::getFreeRam_MB()
/*Возвращает общее кол-во памяти подкачки в байтах*/ /*Возвращает общее кол-во памяти подкачки в байтах*/
unsigned long Memorator::getTotalSwap_B() unsigned long Memorator::getTotalSwap_B()
{ {
#ifdef __linux__
ask(); ask();
#ifdef __linux__
return info.totalswap; return info.totalswap;
#elif _WIN32
return statex.ullTotalPageFile;
#else
return 0;
#endif #endif
} }
@ -84,6 +101,10 @@ unsigned long Memorator::getFreeSwap_B()
#ifdef __linux__ #ifdef __linux__
ask(); ask();
return info.freeswap; return info.freeswap;
#elif _WIN32
return statex.ullAvailPageFile - getFreeRam_B();
#else
return 0;
#endif #endif
} }

View File

@ -2,6 +2,8 @@
#ifdef __linux__ #ifdef __linux__
#include <sys/sysinfo.h> #include <sys/sysinfo.h>
#elif _WIN32
#include <windows.h>
#endif #endif
/*Класс для работы с информацией об оперативной памяти*/ /*Класс для работы с информацией об оперативной памяти*/
@ -24,6 +26,8 @@ class Memorator
private: private:
static void ask(); static void ask();
#ifdef __linux__ #ifdef __linux__
static sysinfo info; static struct sysinfo info;
#elif _WIN32
static MEMORYSTATUSEX statex;
#endif #endif
}; };