在工程的main函數中添加以下代碼(在QApplicationapp(argc, argv);和創建主窗口語句之間添加即可):
// 確保只運行一次
QSystemSemaphore sema("JAMKey",1,QSystemSemaphore::Open);
sema.acquire();// 在臨界區操作共享內存 SharedMemory
QSharedMemory mem("SystemObject");// 全局對象名
if (!mem.create(1))// 如果全局對象以存在則退出
{
QMessageBox::information(0, MESSAGEBOXTXT,"Aninstance has already been running.");
sema.release();// 如果是 Unix 系統,會自動釋放。
return 0;
}
sema.release();// 臨界區
備註:以上內容引自(經過了簡單的修改):http://blog.csdn.net/tingsking18/article/details/5610123
本方法最爲簡單,可以實現應用的單實例運行,但無法自動激活窗口。