zoukankan      html  css  js  c++  java
  • QT防止程序启动两次的方法

    为了使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();  
  • 相关阅读:
    JAVA中 ReentrantReadWriteLock读写锁详系教程,包会
    传统企业的精益转型之路
    什么时候可以使用极限编程?
    “懒蚂蚁”效应在产品开发过程中的应用
    Vue.config.js配置 最新可用版本
    如何查找一个为NULL的MYSQL字段
    MYSQL 50 基础题 (转载)
    记录一下第一次写 50行 SQL代码
    jwtUtils顾名思意
    对于我们程序员来说,基本面是什么呢?
  • 原文地址:https://www.cnblogs.com/zhoug2020/p/5370535.html
Copyright © 2011-2022 走看看