常州金坛建设局网站,教育网站制作下载,广西建设教育协会网站,企业内网网站建设问题
让应用程序只有一个运行实例 QSharedMemory除了可以完成进程间通信#xff0c;还可以实现应用程序单例化。 解法 首先#xff0c;看看QSharedMemory的几个函数#xff1a;
1、QSharedMemory(const QString key, QObject *parent Q_NULLPTR)构造函数
该构造函数…问题
让应用程序只有一个运行实例 QSharedMemory除了可以完成进程间通信还可以实现应用程序单例化。 解法 首先看看QSharedMemory的几个函数
1、QSharedMemory(const QString key, QObject *parent Q_NULLPTR)构造函数
该构造函数为给定的parent指针构造共享内存对象并以key作为该对象的键值。
2、bool create(int size, AccessMode mode ReadWrite) 函数
该函数为标识了键值key的共享内存对象创建内存空间。size是向系统申请的内存空间大小即字节数存取方式mode 默认为ReadWrite。
3、bool attach(AccessMode mode ReadWrite) 函数
该函数将进程和标识了键值key的共享内存进行绑定。如果未调用create申请共享内存空间则无法调用attach进行绑定。返回false。 方法一、利用共享内存不能重复Create。
代码如下。
#include mainwindow.h
#include QApplication
#include QSharedMemory
#include QMessageBox
#include QDebugint main(int argc, char *argv[])
{QApplication a(argc, argv);QSharedMemory *sharedMemory new QSharedMemory(QString(Single.exe));if (sharedMemory-create(1)){MainWindow w;w.show();return a.exec();}else{qDebug()Has running;QMessageBox::information(0, 提示, 程序已运行);}delete sharedMemory;sharedMemory NULL;
}效果
方法二、未创建共享内存不能Attach。
#include QApplication
#include QSharedMemory
int main(int argc, char *argv[])
{//通过共享内存让程序只产生一个运行实例QSharedMemory shared(MainWindow.exe);//该共享内存键值为MainWindow.exeif(shared.attach(QSharedMemory::ReadOnly))//利用attach无法绑定未申请内存空间的特点判断该应用程序是否唯一{return 0;//非唯一结束程序运行}shared.create(1);//创建共享内存空间大小为1字节QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}参考
https://blog.csdn.net/qq_42113801/article/details/113957610