QT中實現程式只執行乙個例項 應用程式的單例化

2021-07-09 17:10:14 字數 604 閱讀 6915

最近想實現乙個應用程式單例化的程式,

目前使qt執行乙個例項有如下幾種方式

1.qsharedmemory

使用共享記憶體,當第二個程序啟動時,判斷記憶體區資料是否建立,如有,則退出; 這種方式有弊端,在程式發生崩潰時,未及時清除共享區資料,導致程式不能正常啟動.

2.檔案鎖

在程式執行的時候就在目錄下建立乙個檔案,當程式執行時就判斷這個檔案是否存在,如果存在說明程式已經在執行。其本質與qsharedmemory相同

3.利用qlocalserver

參照

讓qt只執行乙個例項

如果兩個程式例項之間直接不需要通訊,那麼直接使用共享記憶體實現就可以了,不需要qlocalserver 和 qlocalsocket或者qtimer。

修改main.cpp檔案,加入標頭檔案

#include

int main(int argc, char *argv)

w.show();}

這樣即便是在不同的目錄的程式,仍能互斥

QT中實現程式只執行乙個例項 應用程式的單例化

最近想實現乙個應用程式單例化的程式,目前使qt執行乙個例項有如下幾種方式 1.qsharedmemory 使用共享記憶體,當第二個程序啟動時,判斷記憶體區資料是否建立,如有,則退出 這種方式有弊端,在程式發生崩潰時,未及時清除共享區資料,導致程式不能正常啟動.2.檔案鎖 在程式執行的時候就在目錄下建...

讓程式只執行乙個例項(C )

通常我們會遇到這樣的情況,讓程式只執行乙個例項,比如啟動防毒軟體時,只能啟動乙個,再啟動的話就沒什麼效果!利用程式名來判斷不是乙個好辦法,如果我們把程式名稱改一下就可以執行兩個完全一樣的程序。我們最好利用程式集的attribute存放特定資訊,然後用assembly物件的getcustomattri...

程式只執行乙個例項,並啟用前乙個例項

實現程式只執行一次的方法很多,但是原理都是一樣的,就是執行第一次的時候設定乙個標記,每次執行的時候檢查該標記,如果有就說明已經執行了。具體實現 1 在程式初始化的時候 initinstance 列舉所有的視窗,查詢本程式的例項是否存在 2 在主視窗初始化的時候在本視窗的屬性列表中新增乙個標記,以便程...