目录
一、项目介绍
- 一、项目介绍
- 二、项目基本配置
- 三、UI界面设置
- 四、主程序实现
- 4.1 windows系统
- 4.2 linux系统
- 五、效果演示
本文介绍利用Qt实现防止程序启动两次的方法。 为了使QT 能保证只创建一个实例来进行, 对windows和linux分别采取了全局互斥变量和文件锁的方法。
Q_OS_WIN32宏用来表示编译运行的目标平台是windows操作系统,Q_OS_LINUX则表示目标为linux操作系统。
二、项目基本配置新建一个Qt案例,项目名称为“StartTest”,基类选择“QWidget”,取消选中创建UI界面复选框,完成项目创建。
三、UI界面设置UI界面如下:
无UI界面
四、主程序实现 4.1 windows系统代码如下:
#if defined Q_OS_WIN32 //for win
#include
bool checkOnly()
{
// 创建互斥量
HANDLE m_hMutex = CreateMutex(NULL, FALSE, L"fortest_abc123" );
// 检查错误代码
if (GetLastError() == ERROR_ALREADY_EXISTS) {
// 如果已有互斥量存在则释放句柄并复位互斥量
CloseHandle(m_hMutex);
m_hMutex = NULL;
// 程序退出
return false;
}
else
return true;
}
#endif
int main(int argc, char *argv[])
{
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
Q_INIT_RESOURCE(wisdpsclient);
QApplication app(argc, argv);
//检查程序是否 已经启动过
if(checkOnly()==false)
return 0;
Test dialog;
dialog.show();
return app.exec();
4.2 linux系统
代码如下:
#if defined Q_OS_LINUX //for linux
#include
#include
#include
#include
bool checkOnly()
{
const char filename[] = "/tmp/lockfile";
int fd = open (filename, O_WRONLY | O_CREAT , 0644);
int flock = lockf(fd, F_TLOCK, 0 );
if (fd == -1) {
perror("open lockfile/n");
return false;
}
//给文件加锁
if (flock == -1) {
perror("lock file error/n");
return false;
}
//程序退出后,文件自动解锁
return true;
}
#endif
int main(int argc, char *argv[])
{
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
Q_INIT_RESOURCE(wisdpsclient);
QApplication app(argc, argv);
//检查程序是否 已经启动过
if(checkOnly()==false)
return 0;
Test dialog;
dialog.show();
return app.exec();
五、效果演示
完整效果如下: 完整效果即防止程序启动两次,程序智能启动一次。
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~