zoukankan      html  css  js  c++  java
  • 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。我们根据这个值来实现程序的互斥运行。

    其他程序直接放在程序开始运行处即可

  • 相关阅读:
    解决WordPress中无法将上传的文件移动至wp-content/uploads
    nginx解析php请求为404
    centos6.5搭建lnmp环境
    springMVC 实现ajax跨域请求
    最近的一些坑
    微信开发文档与工具整理
    thymeleaf 中文乱码问题
    Python获取网页指定内容(BeautifulSoup工具的使用方法)
    查找算法的实现与分析(数据结构实验)
    二叉树的先序,中序,后序,层次的递归及非递归遍历
  • 原文地址:https://www.cnblogs.com/swing07/p/8134923.html
Copyright © 2011-2022 走看看