码迷,mamicode.com
首页 > Windows程序 > 详细

【温故Delphi】Win32API之CreateMutex

时间:2014-07-19 22:25:50      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   io   问题   

解决问题

  如何让一个软件在一台机器上只能运行一个实例呢?这个问题用专业术语就是进程互斥。这个问题可以通过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   // 指向互斥对象名的指针
  );

  

  

【温故Delphi】Win32API之CreateMutex,布布扣,bubuko.com

【温故Delphi】Win32API之CreateMutex

标签:style   blog   color   strong   io   问题   

原文地址:http://www.cnblogs.com/liustdelphi/p/3855145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!