Qt保证只有一个实例(将CreateMutex得到的handle通过转换得到值)

使用CreateMutex 可以实现只启动一个应用程序实例

view plaincopy to clipboardprint?
#include <QApplication>
#include <QtNetwork>
#include "mydlg.h"

#ifdef Q_WS_WIN
#include <windows.h>
#endif

int main(int argc, char * argv[]) {
QApplication app(argc,argv);
#ifdef Q_WS_WIN
HANDLE hMutex = CreateMutex(NULL, true, QString("[‘{EFEB2EF6-F8E0-AE44-BABE-1BBEF2C7FD56}‘]").toStdWString().c_str());
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex);
QMessageBox::information(NULL, "Info", "Has been Run", "OK");
app.exit(1);
return 1;
}
#endif
myDlg *win = new myDlg;
win->showLoginForm();
return app.exec();
}
#include <QApplication>
#include <QtNetwork>
#include "mydlg.h"

#ifdef Q_WS_WIN
#include <windows.h>
#endif

int main(int argc, char * argv[]) {
QApplication app(argc,argv);
#ifdef Q_WS_WIN
HANDLE hMutex = CreateMutex(NULL, true, QString("[‘{EFEB2EF6-F8E0-AE44-BABE-1BBEF2C7FD56}‘]").toStdWString().c_str());
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex);
QMessageBox::information(NULL, "Info", "Has been Run", "OK");
app.exit(1);
return 1;
}
#endif
myDlg *win = new myDlg;
win->showLoginForm();
return app.exec();
}

砖头不离身推荐阅读:

Vega Prime的简介

http://blog.sina.com.cn/s/blog_668aae7801017gib.html

时间: 2024-10-10 13:40:49

Qt保证只有一个实例(将CreateMutex得到的handle通过转换得到值)的相关文章

Java程序只运行一个实例[转]

如果希望你的Java程序只能存在一个实例,可以参考下面的用法. 原文链接:http://blog.csdn.net/yaerfeng/article/details/7264729 Java没有提供这样的机制.从操作系统的观点来看,一个启动的Java Application仅仅是一个JVM的运行实例.运行相同Application的两个实例,仅仅是运行两个无关的JVM.       只有让多个运行实例之间有一个既定的通讯机制就可以保证只有一个实例运行. 方案1:使用Java的加锁文件机制,ide

猎豹MFC--只运行一个实例CreateMutex() SetForegroundWindow()

在头文件中声明变量,来保存互斥对象,互斥对象是windows的一个内核对象. 在初始化实例中创建互斥对象并进行检查: 在创建窗口的时候: 添加窗口属性标记: 关闭窗口时把属性删除: 当有一个实例在运行时,要找到该实例,把其置为前端:修改之前实例初始化代码的测试代码 来自为知笔记(Wiz)

让程序只运行一个实例

Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要做出一些限制,让程序只能够运行一个实例.在Delphi编程中,笔者总结出了以下几种方法: 一. 查找窗口法 这是最为简单的一种方法.在程序运行前用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到了,就说明已经存在一个实例.在项目源文件的初始化部分添加以下代码: Program On

【转】delphi程序只允许运行一个实例的三种方法:

一.        创建互斥对象 在工程project1.dpr中创建互斥对象 Program project1 Uses Windows,Form, FrmMain in 'FrmMain.pas' {MainForm}; {$R *.res} var hAppMutex: THandle; //声明互斥变量 begin hAppMutex := CreateMutex(nil, false,’projectname’); //创建互斥对象projectname工程名称 if ( (hAppM

让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)

Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要做出一些限制,让程序只能够运行一个实例.在Delphi编程中,笔者总结出了以下几种方法: 一. 查找窗口法 这是最为简单的一种方法.在程序运行前用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到了,就说明已经存在一个实例.在项目源文件的初始化部分添加以下代码: [delphi] v

只运行一个实例以及内存泄漏检测

unit 使应用程序只运行一个实例; interface uses Windows; const  // - 互斥体唯一的名字  _Mutex_Name = '{19631971-1976-1981-1989-199319941995}'; var  _Mutex_Handle: THandle; implementation initialization // - 载入时调用的代码 // - 创建互斥体对象_Mutex_Handle := CreateMutex(nil, False, LPC

C# WinForm 判断程序是否已经在运行,且只允许运行一个实例

static class Program {   /// <summary>   /// 应用程序的主入口点.   /// </summary>   [STAThread]   static void Main()   {     Application.EnableVisualStyles();     Application.SetCompatibleTextRenderingDefault(false);     //1.这里判定是否已经有实例在运行     //只运行一个实

QT开发(六十五)——QT样式表编程实例

QT开发(六十五)--QT样式表编程实例 一.QComboBox组合框样式定制 1.基本定义 QComboBox  {     border: 1px solid gray;     border-radius: 3px;     padding: 1px 2px 1px 2px;  # 针对于组合框中的文本内容     min-width: 9em;   # 组合框的最小宽度 } QComboBox::drop-down {     subcontrol-origin: padding;   

使程序只运行一个实例

//APP 里面 //1.// 此程序只能运行一次,用互斥量来判断程序是否已运行 1 HANDLE m_hMutex=CreateMutex(nullptr,TRUE, m_pszAppName); 2 if(GetLastError()==ERROR_ALREADY_EXISTS) { return FALSE; } //2. 1 HWND hWnd = FindWindow(nullptr, m_pszAppName/*_T("MyDlg")*/); //第一个参数: 窗口的类名