骄傲の猫的专栏

管理一群程序员,就象放牧一群骄傲的猫。

用户操作
[即时聊天] [发私信] [加为好友]
顾建华ID:ShardowM
3197次访问,排名2万外好友2人,关注者5
编程
ShardowM的文章
原创 5 篇
翻译 0 篇
转载 1 篇
评论 5 篇
最近评论
sky04:刚好在找这个方面资料,谢谢了
henry:现在比较清楚你的意思是什么了。下面有一些讨论:

--“花费一定的时间来构建链表”是指内存池在分配到一块大的内存后,需要在这块内存中建立链表,链接链表中各个节点的关系。

这个时间只是在构建 pool 时一次花销的。比起大量反复分配/释放小物件内存的实际客户程序的实际应该不算什么。

-- 我说的很大困难是指创建一个通用的内存池。
<……
骄傲的猫:把allocate改成下面那个样子,应该更合理
void* Pool::allocate(size_t size)
{
if (size != _block)
return ::operator new(size);

//在被stackPtr堆栈中获得内存的地址
if (top > 0) ……
骄傲的猫:我说的很大困难是指创建一个通用的内存池。在Scott Meyers的Effective C++中介绍的内存池,是通过在被创建的对象中加一个Next指针使其指向下一个对象来建立链表的,这样的话内存池在给对象分配内存时必须通过Next指针来知道下一个对象的地址,因此内存池类就必须知道对象的类的接口,因此也无法将内存池类和对象的类独立出来。
“花费一定的时间来构建链表”是指内存池在分配到一……
henry:-- 但是正是由于链表,给创建一个可通用的内存池类带来了很大的困难,而且在程序必须花费一定的时间来构建链表。

这句话很费解。操作链表很容易,怎么会有什么很大困难?楼主的很大困难具体指的是什么?另外,“花费一定的时间来构建链表”又具体指什么?
文章分类
收藏
    相册
    朋友
    jewely的Blog(RSS)
    Mailbomb的J2ME专栏(RSS)
    英文技术网站
    Code Guru
    Code Project
    NDSTech
    Planet Source Code
    Programmers Heavern
    SGI
    中文技术网站
    CSDN_GameDev的专栏(RSS)
    Winmag国际中文版(简体版)
    中国协议分析网
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 文件夹选择对话框的使用收藏

     | 旧一篇: CListCtrl组件的使用

    文件夹选择对话框的使用

    一. 示例代码

     CString iDir;
     BROWSEINFO bi;
     bi.hwndOwner = this->m_hWnd;
     bi.pidlRoot = NULL;
     bi.pszDisplayName = m_Dir.GetBuffer(512);
     bi.lpszTitle = _T("选择保存的文件夹");
     bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_BROWSEFORCOMPUTER;
     bi.lpfn = NULL;
     bi.lParam = 0;
     bi.iImage = 0;
     ITEMIDLIST* pidl = ::SHBrowseForFolder(&bi);
    
     if (::SHGetPathFromIDList(pidl, m_Dir.GetBuffer(512)))
        m_Dir.ReleaseBuffer();
    

    二. ROWSEINFO结构说明

    typedef struct _browseinfo {
      HWND hwndOwner;
      LPCITEMIDLIST pidlRoot;
      LPTSTR pszDisplayName;
      LPCTSTR lpszTitle;
      UINT ulFlags;
      BFFCALLBACK lpfn;
      LPARAM lParam;
      int iImage;
    } BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;

    hwndOwner:                          对话框的所有者
    pidlRoot:                                从何根路径开始展开文件夹,缺省情况下从“桌面”开始展开.
    pszDisplayName:                指向一个缓存,该缓存返回用户选中的文件夹的显示名称,
                                                    缓存的大小设置为MAX_PATH
    lpszTitle:                               对话框上的treeview控件上方显示的标题, 并不是对话框的标题
    ulFlags:                                显示标志控制项.
                                                   BIF_RETURNONLYFSDIRS, 只有当用户选中的是文件夹时"确定"按钮才有效
                                                   BIF_BROWSEFORCOMPUTER, 只有选中"我的电脑"时"确定"按钮才有效
                                                   BIF_EDITBOX, 在对话框上显示一个Edit,允许用户输入选中项的名称
                                                   BIF_STATUSTEXT, 界面上包含一块statu区域, 回调函数通过向对话框发送
                                                                     BFFM_SETSTATUSTEXT消息设置静态文本
                                                   BIF_VALIDATE, 当用户在Edit中输入不正确的名字时,向对话框发送
                                                                     BFFM_VALIDATEFAILED消息,并调用对话框的回调函数处理该消息
    lpfn                                       设置处理对话框事件的回调函数
    lParam                                对话框传递给回调函数的参数
    iImage                                返回与选中文件夹关联的图片的index , 该index是图片在系统ImageList中的index值.

    三.  SHBrowseForFolder函数

    LPITEMIDLIST WINAPI SHBrowseForFolder(
      LPBROWSEINFO lpbi
    );
    该函数显示文件夹选择对话框, 并允许用户选择文件夹.
    返回值是指向一个ITEMIDLIST结构的指针, 该结构指定根目录下用户选中的文件夹.
    如果在对话框上用户选择的 "取消"按钮, 则返回NULL

    四.  SHGetPathFromIDList函数

    WINSHELLAPI BOOL WINAPI SHGetPathFromIDList( 
      LPCITEMIDLIST pidl, 
      LPSTR pszPath 
    );

    该函数将ITEMIDLIST结构转换为文件系统路径.
    pidl是待转换的ITEMIDLIST的指针
    pszPath是转换后返回的字符串, 该字符串的最大长度为PATH_MAX

    如果转换成功返回TRUE, 否则为FALSE

     

    发表于 @ 2008年06月06日 11:24:56|评论(loading...)|

     | 旧一篇: CListCtrl组件的使用

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 骄傲的猫