• 【温故Delphi】Win32API之CreateMutex


    解决问题

      如何让一个软件在一台机器上只能运行一个实例呢?这个问题用专业术语就是进程互斥。这个问题可以通过CreateMutex来解决。

      进程互斥的核心思想:进程在启动时首先检查是否存在此进程实例,如果没有则创建进程并设置进程实例已存在的标记

      CreateMutex用于创建一个互斥体;

      OpenMutex为现有的一个已命名互斥体对象创建一个新句柄;

      ReleaseMutex释放由线程拥有的一个互斥体的控制权。

      具体实现代码如下:  

     1 constructor TUniqueAppInstance.Create(AUniqueAppStr: string);
     2 begin
     3   inherited Create; 
     5   FMutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, PChar(AUniqueAppStr));
     6   // 互斥对象已建立,说明已有实例存在
     7   if FMutHandle <> 0 then    
     8     raise Exception.Create('当前应用程序已经运行')
     9   else
    10     FMutHandle := CreateMutex(nil, False, PChar(AUniqueAppStr));
    11 end;

    API说明

      HANDLE CreateMutex(

        LPSECURITY_ATTRIBUTES  lpMutexAttributes,   // 指向安全属性的指针
        BOOL  bInitialOwner,   // 初始化互斥对象的所有者
        LPCTSTR  lpName   // 指向互斥对象名的指针
      );

      

      

  • 相关阅读:
    Git 实战教程
    Github 快速上手实战教程
    02.制作一个自己的 Java 编辑器
    Eclipse代码自动提示设置
    java.lang.SuppressWarnings的注解简介
    01.Java 开发简单的计算器
    10个相见恨晚的 Java 在线练手项目
    git 1
    cocos3.2 搭建开发环境
    love 音效
  • 原文地址:https://www.cnblogs.com/liustdelphi/p/3855145.html
Copyright © 2020-2023  润新知