近段寫個程式,需要乙個例項執行。搜尋網文,發現很多類似的文章:http://anwj336.blog.163.com/blog/static/89415209201052410129564/
測試發現並不能很好工作,如下句:
exitinstance方法中新增下面**以刪除程式id:
當第二個例項退出是會把atom表中的id刪除。
還有如果程式被非法中止,如從任務管理器中刪除,由於atom表中id還在,就再不能執行例項了,除非重啟電腦。
有的網友甚至在想,如何保證程式不被任務管理器刪除。真是愚蠢。腦子被驢踢了進水。
下面 是我的**,把它放到對話方塊的初始化函式oninitdialog最後,如果放在initinstance中,需要處理很多擦屁股問題,
擦不乾淨,第二個例項雖退尤存,佔著記憶體不拉屎。
bool isinitinstanceexist=false;
hwnd hwnd = ::getwindow(::getforegroundwindow(), gw_hwndfirst);
for (; hwnd; hwnd = ::getwindow(hwnd, gw_hwndnext))
} if(isinitinstanceexist)
else
::setprop(this->m_hwnd,unique_id, (handle)51888);
#define unique_id _t("ae4e0e00-5e9d-4280-1168-b96da11507e8")
這句定義在開頭,為了防止和別人的程式衝突,盡量不同,還有那個51888,隨便寫。
本**簡潔有效,居家旅行必備。原文**多,還使用atom,聽上去是很玄的東西,不過多此一舉。
如果不想啟用第一例項的視窗,程式可以更簡單,不過那不是我想要的。
程序只執行乙個例項
守護程序往往需要設定使其只執行乙個例項,這裡展示檔案鎖的方式實現 1.使用fcntl 函式設定檔案鎖 include include include include include include include int main else pause return 0 2.使用flock 設定鎖 ...
vc 只執行乙個例項,並啟用已執行例項
程序的互斥執行 createmutex函式實現只執行乙個程式例項 正常情況下,乙個程序的執行一般是不會影響到其他正在執行的程序的。但是對於某些有特殊要求的如以獨佔方式使用序列口等硬體裝置的程式就要求在 其程序執行期間不允許其他試圖使用此埠裝置的程式執行的,而且此類程式通常也不允許執行同乙個程式的多個...
Qt之執行乙個例項程序
from 發布程式的時候,我們往往會遇到這種情況 只需要使用者執行乙個例項程序 使用者可以同時執行多個例項程序 乙個例項程序的軟體有很多,例如 360 酷狗 多個例項程序的軟體也很多,例如 visual studio qt ctretor qq 下面我們來介紹下如何實現乙個例項程序。使用共享記憶體來...