以上兩篇文章中分別講述了QSharedMemory的不同作用糟趾,第一篇講了進程間通信爱致,第二篇講述了怎么讓應(yīng)用程序只啟動一個實例根竿。
今天這篇文章我想講述下,自己在項目中怎么樣讓程序只啟動一個實例疫诽,方法就是使用共享內(nèi)存(其實qt還有一個單例應(yīng)用程序類(QtSignleApplication)钻心,啟動的應(yīng)用程序,默認只能啟動一次)
QSharedMemory *shareMem = newQSharedMemory(QString("SingleInstanceIdentify"));//創(chuàng)建一個帶唯一標示的共享內(nèi)存指針
shareMem->create(1)//創(chuàng)建共享內(nèi)存孕讳,如果創(chuàng)建失敗匠楚,則說明已經(jīng)創(chuàng)建巍膘,否則未創(chuàng)建
if (shareMem->isAttached())//如果進程附加在共享內(nèi)存上
shareMem->detach();//取消進程附加在共享內(nèi)存上
delete shareMem;//析構(gòu)共享內(nèi)存指針
注意:如果程序異常退出?
則共享內(nèi)存沒有被detach,共享內(nèi)存段是無法釋放的芋簿,則應(yīng)用程序不能被在一起啟動峡懈,好的做法是,在共享內(nèi)存create之前与斤,執(zhí)行attach和detach方法肪康。
QT中實現(xiàn)應(yīng)用程序的單例化:這篇文件講述了怎么實現(xiàn)SingleApplication類。
以上是共享內(nèi)存指針使用方式撩穿,下面是共享內(nèi)存對象使用方式:
QSharedMemory sharedMemory;
sharedMemory.setKey("unique mark");
sharedMemory.create(1)