windows mfc 程序,不同程序通信和互斥
1. 共享内存(项目中使用过)
我转备份文章:http://www.cnblogs.com/swing07/p/8087686.html
CreateFileMapping 或 OpenFileMappingA A代表ansi W代表Unicode编码
OpenFileMapping 或 CreateFileMappingA
MapViewOfFile
UnmapViewOfFile
写共享内存,超出初始化的长度,貌似系统会自动扩展长度。
参考:
https://www.cnblogs.com/dongsheng/p/4460944.html
https://www.cnblogs.com/Lalafengchui/p/4223584.html
2. 互斥方法(为真正使用过):
转:http://blog.csdn.net/u011261430/article/details/52796843
在VC下的实现
A. 使用编译器来实现(使用MFC框架):
在.cpp文件开头加上以下几行:
#pragma data_seg("Shared")
int volatile g_lAppInstance =0;
#pragma data_seg()
我们来看一下上面的内容:
第一句 #pragma data_seg("Shared") 创建一个称为Shared 的新节。
第二句 int volatile g_lAppInstance =0 将 g_lAppInstance 放入Shared节中。注意此时只有将g_lAppInstance初始化,编译器才会将其放入Shared节中,否则,将放入Shared以外的 节。(实际上Visual C++ 编译器提供了一个allocate 说明符,使我们可以将数据放到任何节中。)
第三句指示编译器Shared 节结束。
#pragma comment(linker,"/section:Shared,RWS")
这一句,我们使编译链接器知道我们的Shared节具有读,写,共享的属性。这是我们实现互斥运行的关键。这样我们就可以在应用程序之间的多个实例之间共享g_lAppInstance 变量。
在InitInstance() 函数中加入:
if(++g_lAppInstance>1)
{
AfxMessageBox("程序已经运行!");
return FALSE;
}
以上代码的作用是在程序是开始对g_lAppInstancd 加1 ,如果发现其值大于1,那么显示Message Box ,并返回FALSE。(注意:在MFC中如果InitInstance返回FALSE,程序将不会被运行!)
B.使用命名互斥对象:
使用API函数CreateMutex来创建命名互斥对象来实现程序互斥是一个比较通用的方法,我们可以在IninInstance()函数加入如下代码:
HANDLE hObject = CreateMutex(NULL,FALSE,"LJPXYXC");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hObject);
AfxMessageBox("程序已经运行!");
return FALSE;
}
以上的CreateMutext函数创建一个称为“LJPXYXC”的命名的互斥对象,当程序的第二个实例运例时,调用CreateMutex 返回ERROR_ALREADY_EXISTS。我们根据这个值来实现程序的互斥运行。
其他程序直接放在程序开始运行处即可
windows mfc 程序,不同程序通信和互斥的更多相关文章
- 【windows开发实现记事本程序——逻辑篇1】
1. 主要内容 从本节开始介绍windows开发实现记事本程序的逻辑实现部分.本节的主要内容有以下3点: 1. 主窗口定义 -- 主要介绍记事本主界面窗口对应的窗口类及实现方案 2. RichEdi ...
- 应用程序与驱动程序通信 DeviceIoControl
之前写过一篇关于通过DeviceIoControl函数来使应用程序与驱动程序通信的博客,这次再通过这个完整的代码来简要疏通总结一下. 这种通信方式,就是驱动程序和应用程序自定义一种IO控制码,然后调用 ...
- 【MFC】如何在MFC创建的程序中更改主窗口的属性 与 父窗口 WS_CLIPCHILDREN 样式 对子窗口刷新的影响 与 窗体区域绘制问题WS_CLIPCHILDREN与WS_CLIPSIBLINGS
如何在MFC创建的程序中更改主窗口的属性 摘自:http://blog.sina.com.cn/s/blog_4bebc4830100aq1m.html 在MFC创建的单文档界面中: (基于对话框的, ...
- Windows Communication Foundation (WCF)和Windows CardSpace的示例程序
微软公司昨天发布了一个Windows Communication Foundation (WCF)和Windows CardSpace的示例程序包,内容极为丰富,从最简单的Hello World到复杂 ...
- 提交应用 Windows Phone的应用程序认证要求
本文介绍了 Windows Phone 应用程序或游戏要通过认证并在 Windows Phone Marketplace 中发布而必须满足的策略和技术要求. 1.0 计划概述 设计认证过程的一个核心原 ...
- 使用Code::blocks在windows下写网络程序
使用Code::blocks在windows下写网络程序 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创 ...
- 如何在windows中编写R程序包(转载)
网上有不少R包的编译过程介绍,挑选了一篇比较详细的,做了稍许修改后转载至此,与大家分享 如何在windows中编写R程序包 created by helixcn modified by binaryf ...
- 解决由于一个软件限制策略的阻止,windows无法运行此程序cmd.reg
解决由于一个软件限制策略的阻止,windows无法运行此程序cmd.reg Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SOFT ...
- 关于Windows平台下应用程序加载DLL模块的问题.
本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...
- .net Windows服务程序和安装程序制作图解 及 VS 2010创建、安装、调试 windows服务(windows service)
.net Windows服务程序和安装程序制作 最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作 ...
随机推荐
- js全选 反选
// 全选 反选 allChoose: function (o) { var obj = $.extend(true, { id: "#id", name: "name& ...
- ZZNU 正约数之和
#include<stdio.h> #include<string.h> #include<math.h> #include<time.h> #incl ...
- django认证系统 Authentication
Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...
- python web py安装与简单使用
web.py是一个轻量级的python web框架,简单而且功能强大.相对flask和Django,web.py更适合初学者来学习和了解web开发的基础知识. 安装: pip install we ...
- java.io.FileNotFoundException异常,一是“拒绝访问”,二是“系统找不到指定路径”
关于java.io.FileNotFoundException异常 因为这个异常抛出俩种情况:一是“拒绝访问”,二是“系统找不到指定路径” 这里只讲明什么时候抛拒绝访问,什么时候抛找不到指定路径. 原 ...
- docker-compose在dockerfile更新后自动更新image
比如在dockerfile里需要新安装包 形如 加一行 RUN pip3 install XXX 之后,希望docker-compose能更新镜像, 然后启动容器 只需要启动时使用 --build即可 ...
- RabbitMQ消费方式汇总
在学习本章节前,请先学习之前的章节:Java访问RabbitMQ:https://www.cnblogs.com/duanjt/p/10057330.htmlRabbitMQ消息发布时的权衡:http ...
- stm32复位引脚NRST
STM32F的NRST是异步复位脚. 当NRST输入低电平的时候,MCU处于复位状态,重设所有的内部寄存器,及片内几十KB的SRAM. 当NRST从低电平变高时,PC指针从0开始. 但是复位的时候不会 ...
- 数据结构(C语言版)-C语言和C++相关补充
引用类型作形参的三点说明 (1)传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化.(2)引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作:而一般变量作参数,形参与实参就占用 ...
- JavaScript高级程序设计笔记(一)
---恢复内容开始--- 前三章为基础知识,为了方便以后查看,所以比较啰嗦.这里对函数的基本操作没有记录. 1.JavaScript的实现 虽然 JavaScript 和 ECMAScript 通常都 ...