【问题标题】:Start only one instance of MFC Dialog Based Application仅启动一个基于 MFC 对话框的应用程序实例
【发布时间】:2009-05-21 07:16:06
【问题描述】:

我创建了一个基于 MFC 对话框的应用程序。

我启动了应用程序,它运行良好。现在,当它运行时,我再次启动应用程序,它启动了它的另一个实例。

但是,我不想要他的行为;如果应用程序已经在运行,我想阻止它的新实例被创建。

请给我密码。

【问题讨论】:

标签: visual-c++ mfc


【解决方案1】:

在调用应用程序对话框类之前,请尝试在 main 中调用以下函数。如果它返回 False 则不要创建对话框而是退出。

BOOL init()
{
   HANDLE mutex = CreateMutex(NULL, FALSE, "mutexname");
   if(mutex == NULL)
   {
      return FALSE;
   }

   if (GetLastError() == ERROR_ALREADY_EXISTS)
   { 
       /* You only need the message box if you wish to notify the user 
          that the process is running*/
       MessageBox("Another instance is already running.");
       return FALSE;
   }

   return TRUE;
} 

确保mutexname是唯一的,使用VS生成GUID并以字符串形式作为mutex名使用。

【讨论】:

  • 什么是互斥名,我不明白请你举个例子
  • "mutexname" 是您提供的字符串值。您需要在实际代码中替换它。字符串需要尽可能唯一。最简单的方法是使用 Visual Studio 中的 GUID 生成器为您提供 GUID 字符串,例如“{D07E6400-40D6-493a-8470-542A14102CB6}”。用那个替换 mutexname。
  • 啊,我看到您使用的是 VS 6 - 我不记得它是否有 GUID 生成器,在这种情况下使用我上面提供的那个。
  • 不幸的是,我使用的是 VS2008,我不记得 VS6 是否有创建 GUID 的工具。对我来说,我可以在“工具”菜单下选择“创建 GUID”,然后选择注册表版本并将其复制给我放在上面的字符串。您不必为互斥体名称使用 GUID,但它是确保字符串唯一的可靠方法。如果您愿意,可以使用任何字符串,例如“我喜欢土豆泥和肉汁香肠”,直到你遇到喜欢香肠、土豆泥和肉汁的其他人之前,它仍然有效。 :)
  • 快速的 Google 搜索会为您提供guidgenerator.com,这是一个可以生成任意数量 GUID 的站点。或者你可以使用我刚刚为你生成的这个:98bc9b99-a12f-4c61-b840-55e005f8b014
猜你喜欢
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多