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

結尾

只爲記錄,只爲分享! 願所寫能對你有所幫助。不忘記點個贊,謝謝~

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