在工程的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
本方法最为简单,可以实现应用的单实例运行,但无法自动激活窗口。