VC++中用内存映射文件&用CfileFind递归搜索目录
2008-11-13 19:32:48 来源:WEB开发网在Visualc++6.0中我们用默认方式生成基于对话框的应用程序,在程序的初始化阶段,在CwinApp生类的Initln_stance函数的开始处,添加以下代码:
(//创建内存映射文件对象,mu_texRunning是其名字,所有需要互斥运行//的程序都使用这个名字(这些代码对于需要互斥运行的程序是通用的)HANDLEhMap=CreateFileMapping((HANDLE)0Xffffffffnull,PAGE_READWRLTE,0,128,"Mu_texRunning")if(hMap==NULL)//如果创建失败(AfxMessageBox("创建用于互斥运行的内存映文件对象失败!”,MB?OKMICLNSTOP);
returnFALSE;//退出此程序)
//如果已经存在这个同名对象,说明已有需要互斥的其他程序运行了
elseif(GetLastError()==ER_ROR_ALREADY_EXISTS)
(LPVOIDipMen=MapViewOFFile(hMap,FILE_MAP_WRITE,0,0,0);
Cstringstr=(char*)ipMem;//获得已在运行的程序的描述信息
UnmapViewofFile(lpMem);//解除映射图
CloseHandle(hMap);//关闭此对象
AfxMessageBox(str,MB_okMB_ICONSTOP);显示有关的描述信息
ReturnFALSE;//退出此程序)
Else//经过上面的检查,说明这是第一个运行的互斥程序
(LPVOIDip_mem=MapViewofFile(hMap,FILE_MAP_WRITE,0,0,0);
//这里可写入该程序运行的描述信息,上面的错误提示就是这信信息
strcpy((char*)lpMem,"xxx程序正在运行!”);
UnmapViewofFile(lpMem);//解除映射图)
//下面可以继续执行函数INITIN?STANCE原有的代码了
AfxEnableControl_comtainer();
//当程序运行结束了,要记住调用CHANDIE(HMAP)关闭这个对象句柄,//这里可以在Initinstance函数最后returnFALSE之前调用
更多精彩
赞助商链接