qt 共享内存 单例
QT 进程间通信之古老的方法(内存共享)
让QT只运行一个实例
以上两篇文章中分别讲述了QSharedMemory的不同作用,第一篇讲了进程间通信,第二篇讲述了怎么让应用程序只启动一个实例。
今天这篇文章我想讲述下,自己在项目中怎么样让程序只启动一个实例,方法就是使用共享内存(其实qt还有一个单例应用程序类(QtSignleApplication),启动的应用程序,默认只能启动一次)
QSharedMemory *shareMem = new QSharedMemory(QString("SingleInstanceIdentify"));//创建一个带唯一标示的共享内存指针
shareMem->create(1)//创建共享内存,如果创建失败,则说明已经创建,否则未创建
if (shareMem->isAttached())//如果进程附加在共享内存上
shareMem->detach();//取消进程附加在共享内存上
delete shareMem;//析构共享内存指针
注意:如果程序异常退出 则共享内存没有被detach,共享内存段是无法释放的,则应用程序不能被在一起启动,好的做法是,在共享内存create之前,执行attach和detach方法。
QT中实现应用程序的单例化:这篇文件讲述了怎么实现SingleApplication类。
以上是共享内存指针使用方式,下面是共享内存对象使用方式:
QSharedMemory sharedMemory;
sharedMemory.setKey("unique mark");
sharedMemory.create(1)
Qt中实现单例模式(SingleTon)
让QT只运行一个实例
以上两篇文章中分别讲述了QSharedMemory的不同作用,第一篇讲了进程间通信,第二篇讲述了怎么让应用程序只启动一个实例。
今天这篇文章我想讲述下,自己在项目中怎么样让程序只启动一个实例,方法就是使用共享内存(其实qt还有一个单例应用程序类(QtSignleApplication),启动的应用程序,默认只能启动一次)
QSharedMemory *shareMem = new QSharedMemory(QString("SingleInstanceIdentify"));//创建一个带唯一标示的共享内存指针
shareMem->create(1)//创建共享内存,如果创建失败,则说明已经创建,否则未创建
if (shareMem->isAttached())//如果进程附加在共享内存上
shareMem->detach();//取消进程附加在共享内存上
delete shareMem;//析构共享内存指针
注意:如果程序异常退出 则共享内存没有被detach,共享内存段是无法释放的,则应用程序不能被在一起启动,好的做法是,在共享内存create之前,执行attach和detach方法。
QT中实现应用程序的单例化:这篇文件讲述了怎么实现SingleApplication类。
以上是共享内存指针使用方式,下面是共享内存对象使用方式:
QSharedMemory sharedMemory;
sharedMemory.setKey("unique mark");
sharedMemory.create(1)
Qt中实现单例模式(SingleTon)