前言
我們有時候希望程序只運行一個實例,避免同程序相互競爭,在上一章寫到用QLockFile實現獨佔的方式讀寫文件後,意外發現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
結尾
只爲記錄,只爲分享! 願所寫能對你有所幫助。不忘記點個贊,謝謝~