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)