程序单实例运行的一种实现

news2024/12/23 9:27:11

技术背景知识

来自《Windows核心编程》
在这里插入图片描述
在这里插入图片描述

创建自定义段 Section

来自《Windows核心编程》
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

举例(获取当前总共运行的实例数)

  • 创建自定义段并设置属性

    #include "stdafx.h"
    #include "MFCApplication1.h"
    #include "MFCApplication1Dlg.h"
    
    //创建自定义段
    #pragma data_seg("MyShare")
    volatile long g_nAppInstCount = 0;
    #pragma data_seg()
    
    //设置段的属性:RWS, 可读、可写、可共享
    #pragma comment(linker, "/SECTION:MyShare,RWS")
    
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    //....
    
    
  • 访问共享实例

    // CMFCApplication1App 初始化
    
    BOOL CMFCApplication1App::InitInstance()
    {
    	//
    	//略
    	//
    	
    	CWinApp::InitInstance();
    
    	//g_nAppInstCount加一
    	InterlockedExchangeAdd(&g_nAppInstCount, 1);
    
    
    	//
    	//略
    	//
    
    	//弹框显示实例数
    	CString strMsg;
    	strMsg.Format(_T("已运行实例个数%ld"), g_nAppInstCount);
    	AfxMessageBox(strMsg);
    
    	CMFCApplication1Dlg dlg;
    	m_pMainWnd = &dlg;
    	INT_PTR nResponse = dlg.DoModal();
    	
    	//
    	//略
    	//
    
    	//g_nAppInstCount减一
    	InterlockedExchangeAdd(&g_nAppInstCount, -1);
    
    	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
    	//  而不是启动应用程序的消息泵。
    	return FALSE;
    }
    
    
  • 实例崩溃时,g_nAppInstCount不会减1,但所有实例都终止后,再运行,g_nAppInstCount会重置

  • dumpbin.exe查看生成的exe
    在这里插入图片描述

程序单实例运行的实现

  • 使用上文提到的技术,在一个exe的多个实例中可以共享一个g_AppInstCount,只要此值大于0,就说明有实例在运行了。
  • CreateMutex创建一个命名的互斥器,名字需要唯一,如果当前已存在,GetLastError会返回ERROR_ALREADY_EXISTS,故可根据这个事实来实现单实例运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

恒运资本:三大利好来袭,人民币直线拉升!股市能否大反攻?

早盘,又有突发! 9月15日,远洋集团在港交所公告,鉴于其流动性严重状况,经集团审慎考虑,将暂停其一切境外债款(包含下述境外美元证券)项下的付款,直至全体重组及╱或延期解…

JDK API文档地址(中文和英文)

JDK1.6 JDK 1.6 中文手册 JDK1.8 Java 8 中文版 - 在线API手册 - 码工具 Java 官方文档 |官方教程|Java 官方文档 API中文手册|Java 官方文档参考文档_w3cschool 网上还有很多百度网盘中也有 JDK17 https://doc.qzxdp.cn/jdk/17/zh/api/index.html 英文文档 所有版本 …

uniapp微信小程序地图实现周边

官方说明:小程序JavascriptSDK使用指南 - 微信小程序解决方案 | 腾讯位置服务https://lbs.qq.com/product/miniapp/jssdk/ 先申请腾讯地图的开发者密钥,申请地址:腾讯位置服务 - 立足生态,连接未来 申请密钥时,需要勾…

【MySQL基础|第三篇】--- 详谈SQL中的DQL语句

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 前言 DQL&…

浙江工商大学MBA项目哪些人在报考?职务、就业、薪资……

9月下旬到10月下旬是每一年全国研究生网上报名的时间,这段时间内很多MBA考生要确定自己最终一志愿报考的学校和专业,在浙江省内,如果不想报考浙江大学的话,那么其余还有8个MBA项目可以选择。本期杭州达立易考教育为大家整理了浙工…

使用 kind 搭建 Kubernetes学习环境

什么是 kind ? kind ( Kubernetes in Docker ) 让 你 能 够 在 本 地 计 算 机 上 运 行 Kubernetes 。 使 用 这 个 工 具 需 要 你 安 装 Docker 或 者 Podman 。 kind 将 Kubernetes 所需要的所有组件, 全部部署在一个 Docker …

微信小程序 非机动车车辆充电维修管理系统

本课题要求实现一套非机动车车辆管理系统,系统主要包括(管理员服务端和学生微信端、车辆管理员微信端、辅导员服务端、车辆管理员服务端、辅导员微信端)六个模块功能。 设计并实现了非机动车车辆管理系统。系统选用java语言,应用S…

【Android取证篇】华为设备跳出“允许USB调试“界面方法的不同方法

【Android取证篇】华为设备跳出"允许USB调试"界面方法的不同方法 华为设备在鸿蒙OS3系统之后,部分设备启用"允许USB调试"方式会有所变化,再次做个记录—【蘇小沐】 1.实验环境 系统版本Windows 11 专业工作站版22H2(2…

【送书活动】朋友圈大佬都去读研了,这份备考书单我码住了

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

AIGC做题能力谁家强呢?

通义千问刚发布了, 想和文心一言比较一下,就简单的问了三个问题 1 挖了个坑的鸡兔同笼问题,12个头35个脚的情况求解。 通义千问能意识到鸡兔脚都是偶数,计算出现小数点就自动舍弃了,结果就是7鸡5兔一共34只脚。 拒绝…

重点--环形缓冲区-----适合在通信中接收数据

为什么要用环形缓冲区 当有大量数据的时候,我们不能存储所有的数据,那么计算机处理数据的时候,只能先处理先来的,处理之后就会把数据释放掉,再处理下一个。那么已经处理的数据的内存就会被浪费掉。因为后来的数据只能往…

冠达管理:央行降准0.25个百分点 释放流动性超5000亿

人民银行昨日发布消息称,为巩固经济上升向好根底,坚持活动性合理富余,决定于9月15日下调金融组织存款准备金率0.25个百分点(不含已执行5%存款准备金率的金融组织)。本次下调后,金融组织加权平均存款准备金率…

SwiftUI Swift iOS iPadOS 实现更改 App 图标

Xcode: 14.3.1 更改 App 图标 淘宝,支付宝,有道翻译有时候会随着运营活动去调整图标,比如 双 11。(这个很简单,替换一下 AppIcon 就可以了)Github App 提供了多套图标可以修改。(需要配置 &…

誉天在线项目-UML状态图+泳道图

什么是UML UML(Unified Modeling Language)是一种用于软件系统建模的标准化语言。它提供了一组图形符号和规范,用于描述和设计软件系统的结构、行为和交互。 UML图形符号包括类图、用例图、时序图、活动图、组件图、部署图等,每…

原生微信小程序中进行 API 请求

原生微信小程序中进行 API 请求 当在原生微信小程序中进行 API 请求时,封装请求可以提高代码的可维护性和可扩展性。在本篇博客中,我们将一步步介绍如何进一步封装请求,并添加请求超时、拦截器和请求取消功能。 第一步:基本请求封…

生产设备上的静电该如何处理?

在工厂生产车间里有很多机械设备,在生产运作过程中,难免会产生大量静电,静电会产生许多危害。 例如,1、会使电子设备故障、误操作而引起的电磁干扰。 2、电子元件或集成电路的静电击穿; 3、高压静电放电引起触电; 4、静电放电引起…

一种新的图像去噪方式:图像修补+斑点检测的预处理

灵感来源于我之前写的一篇博客:图像处理:基于cv2.inpaint()图像修补。 这种方式可以有效的去除白色的噪点,这里我们需要一张噪点的图像,你可以用下面的代码随机生成一张噪点图片: import cv2 import numpy as np # i…

EDI经营许可证办理要求及流程全解!

我们正处在互联网的大时代,从事互联网行业又会想到电商,提到电商企业,大家会关注这个平台是否合法或是否靠谱,那除了对这个电商品牌的认知以外,还会关注其是否合法合规为用户提供货物购买交易服务,是否具备…

评价模型:层次分析法

1. 模型建立 1.1 建立层次结构模型 在深入分析实际问题的基础上,将有关的各个因素按照不同属性自上而下地分解成若干层次,同一层的诸因素从属于上一层的因素或对上层因素有影响,同时又支配下一层的因素或受到下层因素的作用。最上层为目标层…

day10常用API

1.API 1.1API概述 什么是API ​ API (Application Programming Interface) :应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要…