QT之防止程序重复运行方法
来源:互联网 发布:什么录屏软件好 编辑:程序博客网 时间:2024/05/16 18:33
最近在做一个项目,添加了一个功能:防止一个程序能够重复启动。
包括Windows平台和Linux平台,其中Q_OS_WIN32宏用来表示编译运行的目标平台是windows,Q_OS_LINUX则标示目标为linux。
实现的思想是:对windows和linux分别采取了全局互斥变量和文件锁的方法。
实现方法:
#if defined Q_OS_WIN32 //for win#include <windows.h>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#if defined Q_OS_LINUX //for linux#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>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();}
2 0
- QT之防止程序重复运行方法
- 学习笔记之防止重复运行程序
- 防止程序重复运行
- C#防止程序重复运行
- winform程序防止重复运行
- vc++ 防止程序重复运行
- Vb.Net防止同一程序重复运行的方法
- 防止C++程序重复运行的几种方法
- 防止C++程序重复运行的几种方法
- 防止C++程序重复运行的几种方法
- 防止程序重复运行的一种写法
- VC++防止重复运行同一个程序
- #pragma data_seg 实现防止程序重复运行
- window应用程序防止重复运行的方法
- vc防止运行多个程序,重复运行,同一个程序
- 如何防止窗体重复打开(程序或表单重复运行)?
- [WinForm]C# .net防止一个程序(WinForm)重复运行的方法。
- windows内核编程之如何防止一个相同的程序重复运行
- iOS程序猿之UIBezierPath类属性和方法(画图路径)
- VMware中CentOS设置静态IP
- 60条知乎神回复,毒舌是这样炼成的
- oracle从11.0.2.4.0打PSU 11.0.2.4.8
- 文件下载 浏览器直接打开文件而不是保存 相关问题
- QT之防止程序重复运行方法
- Android自定义开关3
- C语言中const的用法
- 机房重构——DataGridView数据显示,窗体显示
- poi excel 的HYPERLINK(link_location,friendly_name)
- 本地方法(JNI)——访问数组元素+错误处理
- Java设计模式-命令模式(Head First 设计模式5)
- 【引】swift是什么?
- 如何更好的认识自己?