[Win32]用Mutex控制程序的运行实例数目

[Win32]用Mutex控制程序的运行实例数目

在很多情况下,我们需要控制当前程序只能在本机上存在一个运行实例;如果程序已存在运行实例,则在启动程序的时候,提示用户程序已在运行。这可以通过Windows操作系统提供的Mutex来支持,有关Mutex的详情,可以参考操作系统相关的书籍。
为用Mutex实现这种效果,我们许要了解下Win32里面的CreateMutex这个函数:

CreateMutex

The CreateMutex function creates or opens a named or unnamed mutex object.


  
  
  
  
HANDLE CreateMutex(
  LPSECURITY_ATTRIBUTES lpMutexAttributes,
  BOOL bInitialOwner,
  LPCTSTR lpName
);

在调用这个函数的时候,程序会以lpMutexAttributes和bInitialiOwner参数在当前的程序上下文中创建一个lpName指示的名字的Mutex,如果创建成功,程序返回新创建的mutex对象的handle,如果创建失败,返回NULL,用户可以调用GetLastError函数获取错误代码。如果lpName指示的这个mutex对象已经存在(程序已经存在运行实例),则函数返回已经存在的该mutex对象的句柄,调用GetLastError会得到ERROR_ALREADY_EXISTS的错误。
 
那么我们程序要做的就是创建这个mutex对象,检测错误代码,若是ERROR_ALREADY_EXISTS,则表明程序已经运行。
 
这是代码:
 

  
  
  
  
 CreateMutex(NULL,TRUE, " TestMutex " );
 DWORD lastError
= GetLastError();
 
if (ERROR_ALREADY_EXISTS == lastError)
 
{
  MessageBox(NULL,
"An instance of thie program already exists!","Information",MB_OK);
  
return 1;
 }

你可能感兴趣的:([Win32]用Mutex控制程序的运行实例数目)