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

前言

我们有时候希望程序只运行一个实例,避免同程序相互竞争,在上一章写到用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();
}

结果

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

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

https://blog.csdn.net/y396397735/article/details/80814497

结尾

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章