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。我们根据这个值来实现程序的互斥运行。

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

  • 相关阅读:
    BZOJ 3506 机械排序臂 splay
    BZOJ 2843 LCT
    BZOJ 3669 魔法森林
    BZOJ 2049 LCT
    BZOJ 3223 文艺平衡树 splay
    BZOJ 1433 假期的宿舍 二分图匹配
    BZOJ 1051 受欢迎的牛 强连通块
    BZOJ 1503 郁闷的出纳员 treap
    BZOJ 1096 ZJOI2007 仓库设计 斜率优化dp
    BZOJ 1396: 识别子串( 后缀数组 + 线段树 )
  • 原文地址:https://www.cnblogs.com/swing07/p/8134923.html
Copyright © 2011-2022 走看看