Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343820
  • 博文数量: 97
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 636
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-12 22:41
文章分类

全部博文(97)

文章存档

2017年(8)

2015年(87)

2014年(2)

我的朋友

分类: 嵌入式

2015-06-13 12:37:44

本文参考:http://www.cnblogs.com/llz5023/archive/2012/12/30/2839776.html

wince系统中获取系统当前内存使用情况可使用 GlobalMemoryStatus 函数,对于该函数的说明如下:
GlobalMemoryStatus
Win32 API函数。
此函数用来获得当前可用的物理和虚拟内存信息,函数定义为:
VOID GlobalMemoryStatus
(
  LPMEMORYSTATUS lpBuffer
);
此函数无返回值,参数是一个指向名为MEMORYSTATUS的结构的指针。函数的返回信息会被存储在MEMORYSTATUS结构中。
此函数用来替代用来支持16位应用程序的GetFreeSpace函数。
应用程序应该在申请内存前调用此函数以防止影响到其他程序运行。
这个函数的返回值是动态的,并且可能返回相同的值。
关于MEMORYSTATUS结构:
机构定义:
typedef struct _MEMORYSTATUS { // mst
DWORD dwLength; // sizeof(MEMORYSTATUS)
DWORD dwMemoryLoad; // percent of memory in use
DWORD dwTotalPhys; // bytes of physical memory
DWORD dwAvailPhys; // free physical memory bytes
DWORD dwTotalPageFile; // bytes of paging file
DWORD dwAvailPageFile; // free bytes of paging file
DWORD dwTotalVirtual; // user bytes of address space
DWORD dwAvailVirtual; // free user bytesa
} MEMORYSTATUS, *LPMEMORYSTATUS;
结构成员的含义:
dwLength
MEMORYSTATUS结构的大小,在调GlobalMemoryStatus函数前用sizeof()函数求得,用来供函数检测结构的版本。
dwMemoryLoad
返回一个介于0~100之间的值,用来指示当前系统内存的使用率。
dwTotalPhys
返回总的物理内存大小,以字节(byte)为单位。
dwAvailPhys
返回可用的物理内存大小,以字节(byte)为单位。
dwTotalPageFile
显示可以存在页面文件中的字节数。注意这个数值并不表示在页面文件在磁盘上的真实物理大小。
dwAvailPageFile
返回可用的页面文件大小,以字节(byte)为单位。
dwTotalVirtual
返回调用进程的用户模式部分的全部可用虚拟地址空间,以字节(byte)为单位。
dwAvailVirtual
返回调用进程的用户模式部分的实际自由可用的虚拟地址空间,以字节(byte)为单位。
MEMORYSTATUS结构,
结构的定义如下:
MEMORYSTATUS STRUCT
dwLength            DWORD      ;本结构的长度
dwMemoryLoad      DWORD      ;已用内存的百分比
dwTotalPhys       DWORD      ;物理内存总量
dwAvailPhys       DWORD      ;可用物理内存
dwTotalPageFile   DWORD      ;交换文件总的大小
dwAvailPageFile   DWORD      ;交换文件中空闲部分大小
dwTotalVirtual    DWORD      ;用户可用的地址空间
dwAvailVirtual    DWORD      ;当前空闲的地址空间
MEMORYSTATUS ENDS

当然,最后是要上代码的:

点击(此处)折叠或打开

  1. #include <windows.h>
  2. typedef void(WINAPI* FunctionGlobalMemoryStatusEx)(LPMEMORYSTATUS);//声明函数原型指针
  3. MEMORYSTATUS GetMemoryStatus()
  4. {
  5.     HMODULE hModule;
  6.     FunctionGlobalMemoryStatusEx GlobalMemoryStatusEx;
  7.     MEMORYSTATUS status;
  8.     status.dwLength = sizeof(status);
  9.     hModule = LoadLibrary("kernel32.dll");//载入动态链接库kernel32.dll,返回它的句柄
  10.     if(NULL==hModule)//判断载入dll是否成功
  11.     {
  12.         //error.
  13.         //MessageBox(NULL,TEXT("载入动态链接库kernel32.dll"),TEXT("错误"),MB_OK|MB_ICONERROR);
  14.         return;
  15.     }
  16.         //在kernel32.dll句柄里查找GlobalMemoryStatusEx函数,返回改函数的指针
  17.     GlobalMemoryStatusEx =(FunctionGlobalMemoryStatusEx)GetProcAddress(hModule,"GlobalMemoryStatusEx");
  18.     if(NULL==GlobalMemoryStatusEx)//判断函数是否找到
  19.     {
  20.         //error
  21.         //MessageBox(hwndDlg,TEXT("函数查找不到"),TEXT("错误"),MB_OK|MB_ICONERROR);
  22.         return;
  23.     }
  24.     GlobalMemoryStatusEx(&status);//调用函数取得系统的内存情况
  25.     FreeLibrary(hModule);//释放链接库句柄
  26.     return status;
  27. }


阅读(2294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~