Qt 只运行一个程序实例 -QLockFile -QSystemSemaphore 和 QSharedMemory
前言
每次只运行应用程序的一个实例可能是需要的,以限制内存泄露的问题,或者消除某些资源,文件,SQLite数据库等应用程序的两个实例之间的竞争问题。或者,原则上,应用程序只需要用户使用一个副本就行了。
有两种方式可以用来解决这个问题:
1、使用QLockFile
当一个暂且文件被建立时,当应用程序关闭时消灭这个暂且文件。因此,在应用程序的第二个实例启动时检查该文件是否已经建立了一个打开的应用程序实例,若是这个文件存在那么第二个就可以不启动了。
2、使用QSystemSemaphore和QSharedMemory
这种通过建立一个共享内存段,并实验将其毗邻到具有唯一标识符的现有段。若是毗邻实验乐成,则解释应用程序的一个实例已经建立。因此,我们通知用户并关闭应用程序。若是毗邻实验不乐成,那么我们为应用程序选择建立这个内存段并运行第一个实例。
QLockFile
在应用程序启动时代,建立一个暂且“锁定文件”,若是实验建立锁定文件不乐成,则程序解释已经打开应用程序的一个实例,通知用户并关闭当前未启动的实例。
测试程序:
int main(int argc, char *argv[]) { QApplication a(argc, argv); // 本测试程序id取名为SingleAppTest QString path = QDir::temp().absoluteFilePath("SingleAppTest.lock"); // path = C:/Users/yu/AppData/Local/Te