当前位置:  编程技术>综合
本页文章导读:
    ▪用自己指定的模板创建ahk脚本      在windows右键弹出菜单的新建菜单中加入“AutoHotkey 脚本”   1.首先写好模板文件,随便保存在一个地方,比如我是“X:\AutoHotkey\AutoHotkey\SHELLNEW\Template.ahk”; 2.打开注册表(regedit),找到 [HKE.........
    ▪遍历当前目录下所有的.h文件,并将其路径保存到文件中      void CFindAllFilesInDirDlg::OnBnClickedOk() { CString strCurrentPath; GetModuleFileName(AfxGetInstanceHandle(),strCurrentPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); int iPos = strCurrentPath.ReverseFind('\\'); strCurrentPath = strCurrentPath.Lef.........
    ▪怎么有效的防止内存泄漏      首先说说标题可能取得有些大,但是可以理解为编程过程中有效的防止写的代码中有内存泄漏。好了废话不多说了,首先看下面一段代码。 ......

[1]用自己指定的模板创建ahk脚本
    来源: 互联网  发布时间: 2013-11-07

在windows右键弹出菜单的新建菜单中加入“AutoHotkey 脚本”
 
1.首先写好模板文件,随便保存在一个地方,比如我是“X:\AutoHotkey\AutoHotkey\SHELLNEW\Template.ahk”;

2.打开注册表(regedit),找到 [HKEY_CLASSES_ROOT] -> [.ahk] (没有的话,自己新建项.ahk);

3.在 [.ahk] 下新建项 [ShellNew] (已经有的话就删掉重建);

4.在 [ShellNew] 下新建 字符串值 ,名称为 FileName ,键值为模板文件的绝对路径,比如我的是 X:\AutoHotkey\AutoHotkey\SHELLNEW\Template.ahk ;

 


好啦,在右键->新建菜单中就会出现"AutoHotkey 脚本"项,新建以后还会自动将模板内容复制过来,是不是很爽?

附我的注册表导出文件:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.ahk\ShellNew]
"FileName"="X:\\AutoHotkey\\AutoHotkey\\SHELLNEW\\Template.ahk"

 

Template.ahk文件:

/*
AutoHotkey 版本: 
操作系统: Windows XP/Vista/7 
作者: sunwind <1576157@qq.com> 
博客: http://blog.csdn.net/liuyukuan
脚本说明:
脚本版本: v1.0
*/
#NoEnv
#SingleInstance
SendMode Input
SetWorkingDir %A_ScriptDir%
; [ALT]+[R]: 重启程序
!r::
Reload ; 重启 -- DEBUG: optional
Return

; [ALT]+[ESC]: 退出程序
!ESC::
Suspend ; exempt from suspension -- DEBUG: optional
ExitApp



 

作者:liuyukuan 发表于2013-1-6 22:56:24 原文链接
阅读:71 评论:0 查看评论

    
[2]遍历当前目录下所有的.h文件,并将其路径保存到文件中
    来源: 互联网  发布时间: 2013-11-07
void CFindAllFilesInDirDlg::OnBnClickedOk()
{
CString strCurrentPath;
GetModuleFileName(AfxGetInstanceHandle(),strCurrentPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
int iPos = strCurrentPath.ReverseFind('\\');
strCurrentPath = strCurrentPath.Left(iPos);

CFile file;
file.Open(L"h.txt",CFile::modeCreate | CFile::modeWrite);
Recurse(file, strCurrentPath);
file.Close();

CString strPath("D:");
}


void   CFindAllFilesInDirDlg::Recurse(CFile &file, LPCTSTR   pstr)   
{   
CFileFind   finder;   
CString   strWildcard(pstr);   
strWildcard   +=   _T("\\*.*");   
BOOL bWorking = finder.FindFile(strWildcard);   


while(bWorking)   

{   
bWorking=finder.FindNextFile();   
CString temp=finder.GetFilePath();
if (finder.IsDots())   
continue;   


if(finder.IsDirectory())   
{   
CString str = finder.GetFilePath();    
   Recurse(file,str);   
}

if(temp.Right(2) == ".h")
{
temp += L"\r\n";
file.Write(temp,temp.GetLength()*sizeof(TCHAR));
}
}   

finder.Close();   

}


** 源程序 免积分下载地址: http://download.csdn.net/detail/moonshine99/4967281

作者:moonshine99 发表于2013-1-6 22:32:20 原文链接
阅读:67 评论:0 查看评论

    
[3]怎么有效的防止内存泄漏
    来源: 互联网  发布时间: 2013-11-07

首先说说标题可能取得有些大,但是可以理解为编程过程中有效的防止写的代码中有内存泄漏。好了废话不多说了,首先看下面一段代码。

class Image
{
    public:
        Image(const std::string& imgFileName);
        ...
}

class Voice
{
    public:
        Voice(const std::string& vFileName);
        ...
}

class People
{
    public:
            People(const std::string& n,const int& a,const int& h,const std::stirng& imgFileName,const std::string& vFileName);
            ~People( );
    private:
            string name;
            int       age;
            int       height;
            Image *pImg;          //图像
            Voice   *pVoi;          //声音
};

People::People( const std::string& n,const int& a,const int& h,const std::stirng& imgFileName,const std::string& vFileName )
:name(n),age(a),height(h),pImg(0),pVoi(0)
{
        if(imgFileName != "")
        {
            pImg = new Image( imgFileName ) ;
        }
        if(vFileName != " ")
        {
            pVoi = new Voice ( vFileName );
        }
}

People::~People( )
{
        delete pImg;
        delete pVoi;
}
上面代码粗略看似没有问题,但是有没有想到如果People构造函数出错(内存不足,无法分配内存)怎么办?其结果可以预见,就是一个异常抛出来。但是我们仔细想想此时如果已经构造了Image类对象,而在构造Voice类对象时抛出的错误,这个情况会怎么办?程序会因为异常而停止,后面代码不会执行,那么pImg指针所指向的内存就不会得到正确的释放,那么内存就泄漏了。情况如下面代码:
...
People *p =NULL;
try{
    p=new People("test",20,170,".../images/image01.jpg","../voices/voice01.dat");
    ...
catch( ... ){
    delete p;
    throw;
 }
 delete p;
}
仔细想想 new People("test",20,170,".../images/image01.jpg","../voices/voice01.dat")里,如果最后为Image分配的内存被丢失,因为new操作没有成功完成,程序不会p进行赋值操作。所以catch中是没有任何操作的,已被分配的内存就丢失了。
因为对象在构造中抛出异常后C++不负责清除对象,所以我们需要重新设计构造函数让它们在运到异常的时候自己能清除所占用的内存。
People::People( const std::string& n,const int& a,const int& h,const std::stirng& imgFileName,const std::string& vFileName )
:name(n),age(a),height(h),pImg(0),pVoi(0)
{
    try {
        if(imgFileName != "")
        {
            pImg = new Image( imgFileName ) ;
        }
        if(vFileName != " ")
        {
            pVoi = new Voice ( vFileName );
        }
    }
    catch( ...) {
        delete pImg ;
        delete pVoi;
        throw ;
}
这样就行了,解决上面的情况。让成员变量成为const指针,这样设计也合理,避免指针无意被改变。
            Image * const pImg;          //图像
            Voice   * const pVoi;        //声音
那么这样就只能用成员初始化列表为指针初始化,就没有其他地方可以给const指针赋值了。
People::People( const std::string& n,const int& a,const int& h,const std::stirng& imgFileName,const std::string& vFileName )
:name(n),age(a),height(h),
pImg( imgFileName !="" ? new Image( imgFileName ) : 0 ),
pVoi( vFileName != "" ? new Voice( vFileName ) : 0)
{}
如果这样就重新回到上面所遇到的问题,即构造过程中抛出异常,指针可能无法正确的释放所占内存。那么我们可以进一步对代码进行改进,如下:
People::People( const std::string& n,const int& a,const int& h,const std::stirng& imgFileName,const std::string& vFileName )
:name(n),age(a),height(h),
pImg( initImage( imgFileName ) ),
pVoi(  initVoice( vFileName ) )
{}

Image* People::initImage(const string& imgFileName) 
{
    if(imgFileName !="") return new Image(imgFileName);
    else return 0;
}

Voice* People::initVoice(const string& vFileName)
{
    try 
    {
        if(vFileName !="")return new Voice(vFileName)
        esle return 0;
    }
    catch(... )
    {
            delete pImg;
            throw;
    }
}
这样在调用构建Voice对象中加入try...catch...用于释放pImg所占用的内存空间。其实有一个比其更简单的方法就是使用智能指针。
const auto_ptr<Image> pImg;
const auto_ptr<Voice>  pVoi;

People::People( const std::string& n,const int& a,const int& h,const std::stirng& imgFileName,const std::string& vFileName )
:name(n),age(a),height(h),
pImg( imgFileName !="" ? new Image( imgFileName ) : 0 ),
pVoi( vFileName != "" ? new Voice( vFileName ) : 0)
{}
那么问题就算解决了,因为当其中有一个创建失败,离开函数的时候,智能指针会自动删除已经创建的空间,防止内存泄漏了。



作者:couhujia 发表于2013-1-6 22:29:35 原文链接
阅读:85 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3