为了使QT 能保证只创建一个实例来进行, 对windows和linux分别采取了全局互斥变量和文件锁的方法。

Q_OS_WIN32宏用来表示编译运行的目标平台是windows,Q_OS_LINUX则标示目标为linux

  1. #if defined Q_OS_WIN32   //for win
  2. #include <windows.h>
  3. bool checkOnly()
  4. {
  5. //  创建互斥量
  6. HANDLE m_hMutex  =  CreateMutex(NULL, FALSE,  L"fortest_abc123" );
  7. //  检查错误代码
  8. if  (GetLastError()  ==  ERROR_ALREADY_EXISTS)  {
  9. //  如果已有互斥量存在则释放句柄并复位互斥量
  10. CloseHandle(m_hMutex);
  11. m_hMutex  =  NULL;
  12. //  程序退出
  13. return  false;
  14. }
  15. else
  16. return true;
  17. }
  18. #endif
  19. #if defined  Q_OS_LINUX   //for linux
  20. #include <sys/types.h>
  21. #include <sys/stat.h>
  22. #include <fcntl.h>
  23. #include <unistd.h>
  24. bool checkOnly()
  25. {
  26. const char filename[]  = "/tmp/lockfile";
  27. int fd = open (filename, O_WRONLY | O_CREAT , 0644);
  28. int flock = lockf(fd, F_TLOCK, 0 );
  29. if (fd == -1) {
  30. perror("open lockfile/n");
  31. return false;
  32. }
  33. //给文件加锁
  34. if (flock == -1) {
  35. perror("lock file error/n");
  36. return false;
  37. }
  38. //程序退出后,文件自动解锁
  39. return true;
  40. }
  41. #endif
  42. int main(int argc, char *argv[])
  43. {
  44. QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
  45. QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
  46. Q_INIT_RESOURCE(wisdpsclient);
  47. QApplication app(argc, argv);
  48. //检查程序是否 已经启动过
  49. if(checkOnly()==false)
  50. return 0;
  51. Test dialog;
  52. dialog.show();
  53. return app.exec();
  54. }

QT防止程序启动两次的方法的更多相关文章

  1. 防止程序启动两次的方法CreateMutex()

    在工程文件中, WinMain函数里加上以下代码 HANDLE hMutex = CreateMutex(NULL, false, "Process"); if (GetLastE ...

  2. Android adb.exe程序启动不起来处理方法

    经常遇到 Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be ...

  3. 【转】关于Tomcat下项目线程启动两次的问题

    最近遇见了一个很搞得事情,在tomcat下启动项目时自己写的定时程序被执行了两次,导致程序启动了两个线程,使定时任务在几秒间隔内执行了两次,后来通过日志查到,原来是tomcat将项目启动了两次,为什么 ...

  4. 关于Tomcat下项目被启动两次为问题

    最近遇见了一个很搞得事情,在tomcat下启动项目时自己写的定时程序被执行了两次,导致程序启动了两个线程,使定时任务在几秒间隔内执行了两次,后来通过日志查到,原来是tomcat将项目启动了两次,为什么 ...

  5. Qt程序启动画面播放(gif与swf两种动画格式)

    学习Qt有一段时间了,发现一个小问题,网上关于Qt的资料或者总结性的学习及应用文章有点少. 比如,Qt完整的API,程序运行之前的启动画面如何按理想效果播放等,每次想在项目中添加一些应用的时候,总是找 ...

  6. qt 程序启动参数 -qws  (转至 MrTXK

    运行嵌入式程序 在嵌入式QT版本中,程序需要服务器或自己作为服务器程序.服务器程序构造的方法是构造一个QApplication::GuiServe类型的QApplication对象.或者使用-qws命 ...

  7. qt 程序启动参数 -qws

    运行嵌入式程序 在嵌入式QT版本中,程序需要服务器或自己作为服务器程序.服务器程序构造的方法是构造一个QApplication::GuiServe类型的QApplication对象.或者使用-qws命 ...

  8. QSplashScreen类实现Qt程序启动画面

      QSplashScreen类实现Qt程序启动画面 收藏人:zwsj     2013-09-13 | 阅:569  转:6    |   来源   |  分享               程序启动 ...

  9. Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法

    Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 注:在旧 ...

随机推荐

  1. Lua 错误 收集

    不存在的变量或者变量没有定义,提示错误 // :: [error] #: * lua entry thread aborted: runtime error: /opt/openresty/nginx ...

  2. Java并发编程原理与实战四:线程如何中断

    如果你使用过杀毒软件,可能会发现全盘杀毒太耗时间了,这时你如果点击取消杀毒按钮,那么此时你正在中断一个运行的线程. java为我们提供了一种调用interrupt()方法来请求终止线程的方法,下面我们 ...

  3. URL访问 和命名规范

    手册:http://v9.help.phpcms.cn/html/2010/structure_0928/71.html http://yourdomain.com/index.php?m=conte ...

  4. pywin32记录备忘

    项目地址:http://sourceforge.net/projects/pywin32/ 文档地址:http://docs.activestate.com/activepython/2.7/pywi ...

  5. 20165320 预备作业2:技能学习心得与C语言学习

    一.技能学习心得 1.你有什么技能比大多数人好? 我觉得我的篮球打得比一般的人好吧,但是也仅仅掌握了大部分基本的篮球技巧,算不上精通. 2.针对这个技能的获取你有什么成功的经验? 我觉得要打好篮球需要 ...

  6. 关于Linux内核版本

    Linux内核可分为实验版本和产品化版本.每一个版本号由三位数字“x.y.z”组成,第二位数字说明版本类型:偶数表示产品化版本,奇数表示实验版本.产品化版本只修改错误,而实验版本最初是产品化版本的拷贝 ...

  7. 新手向-同步关键字synchronized对this、class、object、方法的区别

    synchronized的语义 实验 分析 在看源代码时遇到多线程需要同步的时候,总是会看见几种写法,修饰方法.修饰静态方法.synchronized(Xxx.class).synchronized( ...

  8. Redhat制作本地yum源

    1.将iso文件上传到服务器上,然后执行: mount -o loop rhel-server-6.3-dvd.iso /media/cdrom 2.设置yum源,在/etc/yum.repos.d目 ...

  9. YUV422(UYVY)转RGB565源代码及其讲解.md

    目录 前言 源码 代码分析 YUV三个分量的关系 循环遍历 结束语 前言 使用zmm220核心板,IFACE102版本的内核等,4300型号的LCD,XC7011_SC1145摄像头,亲测有效. 本文 ...

  10. 【Linux技术】ubuntu常用命令【转】

    转自:http://www.cnblogs.com/lcw/p/3159462.html 查看软件xxx安装内容:dpkg -L xxx查找软件库中的软件:apt-cache search 正则表达式 ...