QT防止程序启动两次的方法
为了使QT 能保证只创建一个实例来进行, 对windows和linux分别采取了全局互斥变量和文件锁的方法。
Q_OS_WIN32宏用来表示编译运行的目标平台是windows,Q_OS_LINUX则标示目标为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();
- }
QT防止程序启动两次的方法的更多相关文章
- 防止程序启动两次的方法CreateMutex()
在工程文件中, WinMain函数里加上以下代码 HANDLE hMutex = CreateMutex(NULL, false, "Process"); if (GetLastE ...
- Android adb.exe程序启动不起来处理方法
经常遇到 Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be ...
- 【转】关于Tomcat下项目线程启动两次的问题
最近遇见了一个很搞得事情,在tomcat下启动项目时自己写的定时程序被执行了两次,导致程序启动了两个线程,使定时任务在几秒间隔内执行了两次,后来通过日志查到,原来是tomcat将项目启动了两次,为什么 ...
- 关于Tomcat下项目被启动两次为问题
最近遇见了一个很搞得事情,在tomcat下启动项目时自己写的定时程序被执行了两次,导致程序启动了两个线程,使定时任务在几秒间隔内执行了两次,后来通过日志查到,原来是tomcat将项目启动了两次,为什么 ...
- Qt程序启动画面播放(gif与swf两种动画格式)
学习Qt有一段时间了,发现一个小问题,网上关于Qt的资料或者总结性的学习及应用文章有点少. 比如,Qt完整的API,程序运行之前的启动画面如何按理想效果播放等,每次想在项目中添加一些应用的时候,总是找 ...
- qt 程序启动参数 -qws (转至 MrTXK
运行嵌入式程序 在嵌入式QT版本中,程序需要服务器或自己作为服务器程序.服务器程序构造的方法是构造一个QApplication::GuiServe类型的QApplication对象.或者使用-qws命 ...
- qt 程序启动参数 -qws
运行嵌入式程序 在嵌入式QT版本中,程序需要服务器或自己作为服务器程序.服务器程序构造的方法是构造一个QApplication::GuiServe类型的QApplication对象.或者使用-qws命 ...
- QSplashScreen类实现Qt程序启动画面
QSplashScreen类实现Qt程序启动画面 收藏人:zwsj 2013-09-13 | 阅:569 转:6 | 来源 | 分享 程序启动 ...
- Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法
Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 注:在旧 ...
随机推荐
- 蓝桥杯 剪邮票 DFS (不错的题目)
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...
- Ubuntu 15.04 双击运行 *.sh、*.py文件
源 起 之前一直在Windows下用AndoridStudio,今天试了一下在Linux系统Ubuntu 15.04中配置Android Studio: 过程和Windws下差不多,但是最后没有生成桌 ...
- javascript 写了个字符串组合的情况
function log() { var i = 0, str = '', args = [].slice.call(arguments); j++; if (isRepeat(args)) { k+ ...
- JS代码判断浏览器版本,支持IE6,IE7,IE8,IE9!三种方法!
web开发的时候有时候会用到JS检测IE的版本,下面是检测Microsoft Internet Explorer版本的三种代码! 方法一: <script type="text/jav ...
- 装好Linux后没有声音的看过来
现代的Linux发行版对声卡的支持都应该没有问题.系统装好,声卡就应该正常工作. (尤其是ArchLinux,我觉得对硬件支持最跟得上时代步伐.) 可是我用mplayer播放mp3文件却没有声音,但也 ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
- input新类型详解
http://www.webhek.com/post/html5-input-type.html
- 微服务深入浅出(5)-- 声明式调用Feign
Feign的使用 Feign采用了声明式的API接口的风格,将Java Http客户端绑定到它的内部,从而调用过程变的简单. 配置文件: spring: application: name: eure ...
- Anaconda+django写出第一个web app(二)
今天开始建立App中的第一个Model,命名为Tutorial. Model的定义在main文件夹下的models.py中通过类进行,我们希望Tutorial这个model包含三个属性:标题.内容和发 ...
- xampp + windows 配置 memcache流程
1.运行xampp服务,打开phpinfo查看信息,如下图: 从上到下,依次为 PHP版本:5.6: architecture:x86: TS:线程安全: vc11 2.牢记以上几个横线内容之后去下载 ...