通行证: 用户 密码
域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏
热门:qq挂机,asp,php,jsp,xml
,sql,.net,编程 程序 网页图象
首页>网络编程>其他相关>正文 中国黑客群攻击美政府网站 拿到部   微软计划开放office文件格式 消除   腾讯联合八部门严厉打击挂机网站   神六载人飞行圆满成功   美国会要求nasa彻底完成空间站建   google中国研究院有望落户清华   深度分析:论雅虎中国的夭折和阿   神六可能于10月13日上午11点发射   盖茨继续当全美首富   adobe ceo痛斥微软 称其管理层从   
热 点 排 行
dll文件下载
qq挂机的n种快速方法
长白山天池怪兽再现 一分钟
腾讯qq调整升级条件 不再诱
ape歌曲的播放、转换和刻录
新开放qq免费挂级网站
qq挂级程序,qq免费挂机源程
刘亦菲 变性人、堕胎,自称
photoshop通道抠图:给秀发
免费把qq炫铃设为本机qq的
用通通通作代理在局域网上
用6位qq注意啦,免费领取6位
超级女声总决赛 现场实况(
用nero制作win98多功能启动
亲身体验!让桌面不再粗糙
推 荐 新 闻
中国黑客群攻击美政府网站
bittorrent被好莱坞招安盗
网站建设中,关键词选择技
神六载人飞行圆满成功
国庆长假上网慎防“移动杀
连环起诉google 传统媒体欲
最强秘籍 ie7最新使用技巧
神六完成总装可接航天器 外
adobe ceo痛斥微软 称其管
微软急调张亚勤回中国 千里
微软宣布重大重组方案 将划
腾讯qq 2005 beta3火热发布
腾讯扩张路线图曝光 陈天桥
腾讯拍拍网正式吹响进军c2
第五届“西湖论剑”文字实
相 关 新 闻
首页>网络编程>其他相关>正文

vc++中实现程序互斥运行


http://www.iyit.net  日期:2005-11-24 17:47:51  来源:易特网络技术  点击:
在软件的开发过程中,有时需要控制一些程序不能同时运行,也就是多个程序间互斥运行(还包括禁止同一程序运行多个实例)。针对这一问题,我们在visual c++ 6.0中利用内存映射文件实现了多个程序间的互斥运行。 
  在讲述具体的编程方法之前,让我们先来看看和内存映射文件操作有关的几个重要的函数: 
  1)createfilemapping函数为指定的文件创建一个文件映射对象,该函数的原型如下: 
  handle createfilemapping( 
   handle hfile, // 用于映射的文件句柄 
   lpsecurity_attributes lpfilemappingattributes, // 内存映射文件的安全描述符 
   dword flprotect, // 文件的保护方式 
   dword dwmaximumsizehigh, 
  // 文件映射对象的最大长度的高32位 
   dword dwmaximumsizelow, 
  // 最大长度的低32位 
   lpctstr lpname       
  // 指定这个内存映射文件的名字 
  ); 
  2)mapviewoffile函数将文件的视图映射到一个进程的地址空间上,返回lpvoid类型的内存指针,通过它,就可以直接访问文件视图中的信息: 
  lpvoid mapviewoffile( 
   handle hfilemappingobjct,     
    // 映射文件对象句柄 
   dword dwdesiredaccess, // 访问模式 
   dword dwfileoffsethigh,       
  // 文件偏移地址的高32位 
   dword dwfileoffsetlow,       
  // 文件偏移地址的低32位 
   dword dwnumberofbytestomap   
  // 映射视图的大小 
  ); 
  在visual c++ 6.0中我们用默认方式生成基于对话框的应用程序,在程序的初始化阶段,在cwinapp派生类的initinstance函数的开始处,添加以下代码: 
  { handle hmap=createfilemapping((handle)0xffffffff, null, 
page—readwrite, 0, 128, ″mutexrunning″); 
  if(hmap==null) // 如果创建失败 
{ afxmessagebox(″创建用于互斥运行的内存映射文件对象失败!″, 
mb—ok|mb—iconstop); 
return false; } 
else if(getlasterror()==error—already—exists) 
{ lpvoid lpmem=mapviewoffile(hmap, file_map—write, 0,0,0); 
cstring str=(char)lpmem; 
unmapviewoffile(lpmem); 
closehandle(hmap); 
afxmessagebox(str, mb—ok|mb—iconstop); 
return false; } 
else 
{ lpvoid lpmem=mapviewoffile(hmap, file—map—write, 0,0,0); 
strcpy((char)lpmem, ″xxx程序正在运行!″); 
unmapviewoffile(lpmem); 


afxenablecontrolcontainer(); 
  ...... 
  //这里可以在initinstance函数最后returnfalse之前调用 
   closehandle(hmap); 
  //关闭内存映射文件对象句柄 
return false; 
  } 
  以上的程序在visual c++ 6.0中已调试通过。 

上一篇:c++编程人员容易犯的10个c#错误
下一篇:c++入门解惑——为什么学习c++

[发送给好友] [打印本页] [关闭窗口] [返回顶部] 转载请注明来源:http://www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 投稿作者: 易特网络技术
信息来源: 易特网络技术 录入时间: 2005-11-24 17:47:51
浏览次数: 投稿信箱: shtghy@163.com
  友情链接
设置首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights ?2004-2005 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息