轉帖|其它|編輯:郝浩|2010-05-24 14:08:25.000|閱讀 2190 次
概述:讓 Qt 程序只運行一個實例,當然用 win 下的 native API 是很不靠譜的,因為這樣會犧牲掉 Qt 跨平臺的特性。所以本文介紹兩種解決方案。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
讓應用程序只運行一個實例,這個問題很古老了。讓Qt 程序只運行一個實例,當然用 win 下的 native API 是很不靠譜的,因為這樣會犧牲掉 Qt 跨平臺的特性。所以我給出下面兩種解決方案。原理上就是進程間通訊。 QSingleApplication 用的而是 socket ,而我使用的是共享內存。
1. 使用 QSingleApplication 。
QSingleApplication 是 Qt 提供的一個 solution ,它不包含在 Qt 的 library 中。遵循 LGPL 協議。關于如何使用,下載了這個 solution 之后,里面有例子。還有, QtCreator 中還用到了它。你也可以翻一番 QtCreator 的源代碼。
2. 使用共享內存。
// 確保只運行一次 QSystemSemaphore sema("JAMKey",1,QSystemSemaphore::Open); sema.acquire();// 在臨界區操作共享內存 SharedMemory QSharedMemory mem("SystemObject");// 全局對象名 if (!mem.create(1))// 如果全局對象以存在則退出 { QMessageBox::information(0, MESSAGEBOXTXT,"An instance has already been running."); sema.release();// 如果是 Unix 系統,會自動釋放。 return 0; } sema.release();// 臨界區 |
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載