单例程序启动后,如果遇到需要通过程序进行重启,修改上文中的代码如下:
QSystemSemaphore sema("CLGObject", 1, QSystemSemaphore::Open);
sema.acquire();// 在临界区操作共享内存
QSharedMemory mem("CLGSystemObjcet");// 全局对象名
if (!mem.create(1))// 如果全局对象已存在则退出
{
sema.release();// 如果是 Unix 系统,会自动释放。
return 0;
}
QApplication application(argc, argv);
ClgWin win;
win.show();
sema.release();// 释放临界区
int ret=application.exec(); //获取程序返回值,如果为10 则释放mem ,然后重启
if(ret == 10)
{
mem.detach();
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
}
qApp->exit(10);