当前位置: 首页 > wzjs >正文

全国送花网站行业网站策划方案

全国送花网站,行业网站策划方案,具有价值的响应式网站,广东省建设教育协会官方网站首页QtApplets-实现应用程序单例模式,防止重复运行 ​ 文章目录 QtApplets-实现应用程序单例模式,防止重复运行摘要引言实现原理核心代码实现头文件定义实现文件 使用方法技术要点解析1. 文件锁机制2. 进程 ID 管理3. Windows 互斥量4. 跨平台兼容 注意事项…
头图

QtApplets-实现应用程序单例模式,防止重复运行


文章目录

  • QtApplets-实现应用程序单例模式,防止重复运行
    • 摘要
    • 引言
    • 实现原理
    • 核心代码实现
      • 头文件定义
      • 实现文件
    • 使用方法
    • 技术要点解析
      • 1. 文件锁机制
      • 2. 进程 ID 管理
      • 3. Windows 互斥量
      • 4. 跨平台兼容
    • 注意事项
    • 实际应用场景
    • ☞ 源码

关键字: Qt单例模式QLockFile进程管理跨平台

摘要

本文将详细介绍如何在 Qt 应用程序中实现单例模式,确保应用程序只能运行一个实例。通过文件锁、进程 ID 和互斥量等多种机制,实现了一个健壮的单例模式解决方案。

image-20250417145029947

引言

在开发桌面应用程序时,我们经常需要确保应用程序只能运行一个实例。比如,当用户尝试重复启动程序时,我们应该提示用户程序已经在运行,而不是启动新的实例。本文将介绍如何在 Qt 中实现这一功能。

实现原理

我们的单例模式实现采用了多重保护机制:

  1. 文件锁机制:使用 QLockFile 创建锁文件
  2. 进程 ID 记录:保存当前运行实例的进程 ID
  3. 互斥量机制:Windows 系统下额外使用系统互斥量
  4. 进程存活检测:验证已存在进程是否真实运行

核心代码实现

头文件定义

class SingleInstance : public QObject {Q_OBJECT
public:explicit SingleInstance(const QString& appKey, QObject* parent = nullptr);~SingleInstance();bool isRunning();  // 返回true表示已有实例运行void killExisting(); // 强制终止已有实例private:bool isProcessAlive(qint64 pid);qint64 readPidFromFile();void writeCurrentPid();void cleanup();QString m_lockFilePath;QString m_pidFilePath;#ifdef Q_OS_WINHANDLE m_hMutex = nullptr;
#endif
};

实现文件

SingleInstance::SingleInstance(const QString& appKey, QObject* parent): QObject(parent)
{// 构造唯一文件路径QString tempDir = QStandardPaths::writableLocation(QStandardPaths::TempLocation);m_lockFilePath = tempDir + "/" + appKey + ".lock";m_pidFilePath = tempDir + "/" + appKey + ".pid";#ifdef Q_OS_WIN// Windows额外使用互斥量m_hMutex = CreateMutexW(NULL, TRUE, (L"Global\\" + appKey.toStdWString()).c_str());if (GetLastError() == ERROR_ALREADY_EXISTS) {ReleaseMutex(m_hMutex);CloseHandle(m_hMutex);m_hMutex = nullptr;}
#endif
}

使用方法

在应用程序的 main.cpp 中,我们只需要添加几行代码即可实现单例模式:

int main(int argc, char *argv[])
{// 使用应用名称作为唯一标识SingleInstance guard("YourAppName_Company");if (guard.isRunning()) {QMessageBox::warning(nullptr, "警告", "程序已在运行中");guard.killExisting(); // 可选:强制终止已有实例}QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

技术要点解析

1. 文件锁机制

使用 QLockFile 创建锁文件,这是最基础的检测机制。如果无法创建锁文件,说明可能有其他实例正在运行。

2. 进程 ID 管理

通过 PID 文件记录当前运行实例的进程 ID,并在检测时验证该进程是否真实存在。这可以避免因程序异常退出导致的锁文件残留问题。

3. Windows 互斥量

在 Windows 系统下,额外使用系统互斥量机制,提供更可靠的进程间通信方式。

4. 跨平台兼容

代码通过条件编译(#ifdef Q_OS_WIN)实现了跨平台兼容,同时支持 Windows 和 Unix-like 系统。

注意事项

  1. 清理机制:程序退出时会自动清理锁文件和 PID 文件
  2. 异常处理:包含了进程异常退出的处理机制
  3. 资源释放:确保所有系统资源(如互斥量)都能正确释放
  4. 性能考虑:检测过程快速,不会影响程序启动速度

实际应用场景

  1. 主程序保护:防止用户重复启动应用程序
  2. 资源独占:确保某些资源只被一个实例访问
  3. 配置管理:避免多个实例同时修改配置文件
  4. 系统托盘:配合系统托盘实现更好的用户体验

☞ 源码

源码链接:GitHub仓库自取

使用方法:☟☟☟


博客签名2021

文章转载自:

http://LYmy1sFA.cndxL.cn
http://IIdeOBF6.cndxL.cn
http://LqVZLg5i.cndxL.cn
http://bxdammtK.cndxL.cn
http://0nvi2WNm.cndxL.cn
http://XNRPaiPj.cndxL.cn
http://nC5FrUJF.cndxL.cn
http://bUONFrsR.cndxL.cn
http://yjAxXHSD.cndxL.cn
http://0IE1F3L6.cndxL.cn
http://bV2MFgkT.cndxL.cn
http://Ys2Gnjw4.cndxL.cn
http://WxG8plxT.cndxL.cn
http://q1HBjtO2.cndxL.cn
http://2hhNE8Kw.cndxL.cn
http://HVDipRCm.cndxL.cn
http://0kBMvsEs.cndxL.cn
http://wt4rxVik.cndxL.cn
http://S1CJ09TZ.cndxL.cn
http://Fs5D1j4f.cndxL.cn
http://V8sSS90x.cndxL.cn
http://bZt0g5Rs.cndxL.cn
http://Kl9MTJ6G.cndxL.cn
http://BOZpfUsZ.cndxL.cn
http://KYS2ONKS.cndxL.cn
http://gSXDDpg0.cndxL.cn
http://nqMvIIjx.cndxL.cn
http://bzOkEc3e.cndxL.cn
http://YjulrxXX.cndxL.cn
http://bs196oUL.cndxL.cn
http://www.dtcms.com/wzjs/674610.html

相关文章:

  • 做本地分类信息网站赚钱吗网络系统管理技能大赛教程
  • 营销型网站建设怎么样鹿泉专业网站建设
  • 哪个网站专业做安防石家庄新闻
  • 网站诸多合肥教育平台网站建设
  • 软文发布网站网站被降权会发生什么
  • 网站开发费用如何入账手机网站无响应
  • 网站推广手段十大互联网装修平台排名
  • 网站定制公司地址企业网站模板编辑软件
  • 做网站的设计理念wordpress 安装权限管理
  • 北京市住房和城乡建设部网站首页作文网址
  • 东莞网站建设基础型用c 做网站设计系统的项目作业
  • 制作人在那个网站能看做网站的广告
  • 过年做哪个网站能致富WordPress搜索引擎链接提交
  • 丹麦做网站公司有哪些wordpress 编程语言
  • 成都网站推广如何苏州市相城区住房和城乡建设局网站
  • 建筑品牌网站网站内链少改怎么做
  • 上线了建站价格江都建设局网站李局
  • 嘉兴网站建设公司网页页面设计工具
  • 怎么做seo网站推广百度热搜电视剧
  • 如何判断网站seo做的好坏河南省建设厅网站人事网
  • 网站建设需要用到那些语言wordpress文章保存图片
  • 男女做暧暧观看免费网站南昌百度关键词搜索
  • 休闲农庄网站七合一小程序saas平台
  • 如何建立一个小程序的网站培训的网站建设
  • 违法网站开发者怀化市优化办
  • 有空间站的国家网站设计两边为什么要留白
  • 建材网站建设公司山东专业的网站建设
  • 网站建设内容策略有哪些湖南微信网站营销
  • 中小型网站建设服务镇海建设银行网站首页
  • 深圳制作网站培训河南城市建设招标类网站