• 【温故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   // 指向互斥对象名的指针
      );

      

      

  • 相关阅读:
    Linux shell 中$() ` `,${},$[] $(()),[ ] (( )) [[ ]]作用与区别
    bootstrap navbar items alignment
    bootstrap使用前注意点和盒子模型
    css 资料链接
    serial minicom
    摄像机distortion vector、project matrix、camera matrix
    ros nodelet 使用
    covariance matrix 和数据分布情况估计
    MessagePack简析
    容量规划
  • 原文地址:https://www.cnblogs.com/liustdelphi/p/3855145.html
Copyright © 2020-2023  润新知