System.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Windows/System.cpp
  2. #include "StdAfx.h"
  3. #include "System.h"
  4. namespace NWindows {
  5. namespace NSystem {
  6. UInt32 GetNumberOfProcessors()
  7. {
  8. SYSTEM_INFO systemInfo;
  9. GetSystemInfo(&systemInfo);
  10. return (UInt32)systemInfo.dwNumberOfProcessors;
  11. }
  12. #if !defined(_WIN64) && defined(__GNUC__)
  13. typedef struct _MY_MEMORYSTATUSEX {
  14. DWORD dwLength;
  15. DWORD dwMemoryLoad;
  16. DWORDLONG ullTotalPhys;
  17. DWORDLONG ullAvailPhys;
  18. DWORDLONG ullTotalPageFile;
  19. DWORDLONG ullAvailPageFile;
  20. DWORDLONG ullTotalVirtual;
  21. DWORDLONG ullAvailVirtual;
  22. DWORDLONG ullAvailExtendedVirtual;
  23. } MY_MEMORYSTATUSEX, *MY_LPMEMORYSTATUSEX;
  24. #else
  25. #define MY_MEMORYSTATUSEX MEMORYSTATUSEX
  26. #define MY_LPMEMORYSTATUSEX LPMEMORYSTATUSEX
  27. #endif
  28. typedef BOOL (WINAPI *GlobalMemoryStatusExP)(MY_LPMEMORYSTATUSEX lpBuffer);
  29. UInt64 GetRamSize()
  30. {
  31. MY_MEMORYSTATUSEX stat;
  32. stat.dwLength = sizeof(stat);
  33. #ifdef _WIN64
  34. if (!::GlobalMemoryStatusEx(&stat))
  35. return 0;
  36. return stat.ullTotalPhys;
  37. #else
  38. GlobalMemoryStatusExP globalMemoryStatusEx = (GlobalMemoryStatusExP)
  39. ::GetProcAddress(::GetModuleHandle(TEXT("kernel32.dll")),
  40. "GlobalMemoryStatusEx");
  41. if (globalMemoryStatusEx != 0)
  42. if (globalMemoryStatusEx(&stat))
  43. return stat.ullTotalPhys;
  44. {
  45. MEMORYSTATUS stat;
  46. stat.dwLength = sizeof(stat);
  47. GlobalMemoryStatus(&stat);
  48. return stat.dwTotalPhys;
  49. }
  50. #endif
  51. }
  52. }}