前言
我们有时候希望程序只运行一个实例,避免同程序相互竞争,在上一章写到用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
结尾
只为记录,只为分享! 愿所写能对你有所帮助。不忘记点个赞,谢谢~