QLockFile实现只运行一个程序实例

本文介绍了如何利用Qt的QLockFile类来确保程序在同一时刻仅有一个实例运行。通过在main函数中创建临时文件,当有多个实例尝试启动时,后续实例会因无法创建文件而退出,从而达到限制程序实例数量的效果。
摘要由CSDN通过智能技术生成

前言

我们有时候希望程序只运行一个实例,避免同程序相互竞争,在上一章写到用QLockFile实现独占的方式读写文件后,意外发现QLockFile作为“防火墙”就可以实现这个要求。

Qt中QLockFile实现以独占的方式读写文件

实现

在程序的main函数中,用QLockFile创建一个临时文件,程序关闭则临时文件清除,如果此时有第二个或多个同程序启动,就会创建文件失败,直接返回,那么第二个或多个程序就会退出,实现只运行一个程序实例的目的。

代码

注:是在我之前的Demo中直接修改添加的,程序名称为:MyTableWidget

#include "MyTableWidget.h"
#include <QApplication>
#include <QLockFile>
#include <QMessageBox>
#include <QDir>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //获取临时文件下MyTableWidget.lock文件的绝对路径
    QString tempPath_ = QDir::temp().absoluteFilePath("MyTableWidget.lock");

    //尝试锁定临时文件,若创建失败则说明已存在该程序实例,此程序弹出警告并退出
    QLockFile lockfile_(tempPath_);
    lockfile_.isLocked();
    if(!lockfile_.tryLock(0))
    {
        QMessageBox::warning(NULL,"警告","应用程序已启动");
        return 1;
    }

    MyTableWidget w;
    w.show();

    return a.exec();
}

结果

左边是首次开启程序,右边是开启的第二次,弹出警告并退出。

 当然,实现只运行一个程序实例的方法还有其它的,见下方参考:

Qt 只运行一个程序实例 -QLockFile -QSystemSemaphore 和 QSharedMemory-CSDN博客

结尾

只为记录,只为分享! 愿所写能对你有所帮助。不忘记点个赞,谢谢~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值