hsysinfo.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef H_SYS_INFO_H_
  2. #define H_SYS_INFO_H_
  3. #include "hplatform.h"
  4. #include "hfile.h"
  5. // logic processors number
  6. inline int get_ncpu() {
  7. #ifdef __unix__
  8. return sysconf(_SC_NPROCESSORS_CONF);
  9. #elif defined(_WIN32)
  10. SYSTEM_INFO si;
  11. GetSystemInfo(&si);
  12. return si.dwNumberOfProcessors;
  13. #endif
  14. return 1;
  15. }
  16. typedef struct meminfo_s {
  17. unsigned int total; // MB
  18. unsigned int avail; // MB
  19. } meminfo_t;
  20. inline int get_meminfo(meminfo_t* mem) {
  21. #ifdef __linux__
  22. // cat /proc/meminfo
  23. // MemTotal: 16432348 kB
  24. // MemFree: 180704 kB
  25. // MemAvailable: 10413256 kB
  26. // Buffers: 1499936 kB
  27. // Cached: 7066496 kB
  28. HFile file;
  29. if (file.open("/proc/meminfo", "r") != 0) {
  30. return -10;
  31. }
  32. string line;
  33. char name[64];
  34. unsigned int num;
  35. char unit[8];
  36. file.readline(line);
  37. sscanf(line.c_str(), "%s %u %s", name, &num, unit);
  38. //printf("%s %u %s\n", name, num, unit);
  39. mem->total = num >> 10;
  40. file.readline(line);
  41. file.readline(line);
  42. sscanf(line.c_str(), "%s %u %s", name, &num, unit);
  43. //printf("%s %u %s\n", name, num, unit);
  44. mem->avail = num >> 10;
  45. return 0;
  46. #elif defined(_WIN32)
  47. MEMORYSTATUSEX memstat;
  48. memset(&memstat, 0, sizeof(memstat));
  49. memstat.dwLength = sizeof(memstat);
  50. GlobalMemoryStatusEx(&memstat);
  51. mem->total = memstat.ullTotalPhys >> 20;
  52. mem->avail = memstat.ullAvailPhys >> 20;
  53. return 0;
  54. #endif
  55. return -1;
  56. }
  57. #endif // H_SYS_INFO_H_