首页
社区
课程
招聘
[旧帖] 百度百科中的一处错误 不知道自己发现的对不对 0.00雪花
发表于: 2011-3-11 19:33 1121

[旧帖] 百度百科中的一处错误 不知道自己发现的对不对 0.00雪花

2011-3-11 19:33
1121
不知道自己发现的对不对 恳请大家批评

先看一下MSDN的两处说明  我的是2001年最后一季的msdn  是vc6最后一个版本的msdn

To destroy the snapshot, use the CloseHandle function

而msdn中还有这样的说明

The snapshot returned is a copy of the current state of the system. To close a snapshot call the CloseToolhelp32Snapshot function. Do not call the CloseHandle function to close the snapshot call. Calling CloseHandle to close the snapshot call generates a memory leak.

第二个意思就是说 不要调用CloseHandle 因为会造成内存泄漏

有点迷惑啊 到底用那个函数呢

百度百科中说

#include "StdAfx.h"

  #include "windows.h"

  #include "tlhelp32.h"

  #include "stdio.h"

  int main(int argc, char* argv[])

  {

  PROCESSENTRY32 pe32;

  //在使用这个结构前,先设置它的大小

  pe32.dwSize = sizeof(pe32);

  //给系统内所有的进程拍个快照

  HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

  if (hProcessSnap == INVALID_HANDLE_VALUE)

  {

  printf("CreateToolhelp32Snapshot 调用失败.\n");

  return -1;

  }

  //遍历进程快照,轮流显示每个进程的信息

  BOOL bMore = ::Process32First(hProcessSnap,&pe32);

  while (bMore)

  {

  printf("进程名称:%s\n",pe32.szExeFile);

  printf("进程ID:%u\n\n",pe32.th32ProcessID);

  bMore = ::Process32Next(hProcessSnap,&pe32);

  }

  //不要忘记清除掉snapshot对象

  //这里有误,关闭快照不能调用CloseHandle,这会造成内存泄漏

  //::CloseHandle(hProcessSnap);

  //调用CloseToolhelp32Snapshot关闭快照

  ::CloseToolhelp32Snapshot(hProcessSnap);

   return 0;

  }

//这里有误,关闭快照不能调用CloseHandle,这会造成内存泄漏

  //::CloseHandle(hProcessSnap);

  //调用CloseToolhelp32Snapshot关闭快照

  ::CloseToolhelp32Snapshot(hProcessSnap);

后来详细研究了一下 百度百科错了 CloseToolhelp32Snapshot只适用于WinCE平台 百度百科用的也是 人民邮电出版社 王艳平 张铮老师  windows程序设计的代码 两位老师书里的代码不错 就是应该用CloseHandle来清除snapshot对象

而上面两个MSDN的说明详细看了一下 一个是SDK Platform的 一个是WinCE的 而 在SDK下 根本没有CloseToolhelp32Snapshot这个函数

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
2
刚才去百度百科看已经改过来了 这个帖子发的多余了
http://baike.baidu.com/view/589425.html

注意,在Win NT中,要删除快照,使用CloseHandle函数;在Win CE中,要删除快照,使用CloseToolhelp32Snapshot函数。
2011-3-11 19:38
0
游客
登录 | 注册 方可回帖
返回
//