找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4791|回复: 2

ACE_Mem_Map 的关闭句柄的问题

[复制链接]
发表于 2010-4-7 12:33:46 | 显示全部楼层 |阅读模式
我使用ACE_Mem_Map 创建新内存映射文件,然后写入数据,关闭ACE_Mem_Map,因为我是网络接收大量小图片文件,所以在接收到400个左右就出现  unable to register client handler: Too many open files  错误!

关键代码如下,请大家帮忙看看什么原因:

  delete pMapPicture;
  pMapPicture = NULL;
  pMapPicture = new ACE_Mem_Map;
  int nret =  pMapPicture->map((const ACE_TCHAR *)picName
   ,pictureLength
   ,O_RDWR | O_CREAT
   ,ACE_DEFAULT_FILE_PERMS
   ,PROT_RDWR,ACE_MAP_SHARED);

/* 拷贝数据*/

  pMapPicture->sync();
  pMapPicture->unmap();
  pMapPicture->close_filemapping_handle();
  pMapPicture->close();
  delete pMapPicture;
  pMapPicture = NULL;

循环执行上面代码!
几百次后就出现 unable to register client handler: Too many open files  错误,我哪里错了?
发表于 2010-4-7 17:30:14 | 显示全部楼层
看现象,跟ACE_Mem_Map 无关。应该是你的系统,ulimit参数没改。默认是1024.你同时处理文件和网络链接,总和超出了这个数字,就导致无法再打开新文件。unix里面,一切皆是文件 - 设计理念。
可以使用ulimit -HSn 65535,把这个设置高。试试看。
发表于 2010-4-8 00:30:28 | 显示全部楼层
1.
典型的资源泄漏。ACE_Mem_Map是一种GUARD对象,应该不会有问题。

2.
试试
{
    ACE_Mem_Map("filename");
    .....
}就可看出是谁的问题。

3.
某些系统条件下,最大只有0xff-1个句柄。即使ulimit也没用。

[ 本帖最后由 steven99ca 于 2010-4-8 03:11 编辑 ]
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 12:14 , Processed in 0.037141 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表