有时候需要保证我们程序只有一个实例,有很多程序都是这样设计,当你打开一个程序之后,再运行它时会提示你“有一个实例正在运行”。
怎么实现呢?下面以QT下的实现举例,很容易要以改成普通的VC实现。
#include <QtGui/QApplication>
#include <QtCore/QSharedMemory>
#include <QtGui/QMessageBox>
int assumeSingleInstance(const char* program)
{
static QSharedMemory shm(program);
if(shm.create(100) == false)
{
return -1;
}
return 0;
}
这个函数借助于SharedMemory来检查的,是不是很简单,因为SharedMemory是系统级的,可以在多个程序实例中检测。
int main(int argc, char *argv[])
{
// QT应用程序
QApplication a(argc, argv);
// 应用程序单例检查
if(assumeSingleInstance("topo-client.lock") < 0)
{
QMessageBox::information(NULL, QStrFromGb2312("提示"),
QStrFromGb2312("另一个实例正在运行"));
return -1;
}