【发布时间】:2011-12-08 04:15:39
【问题描述】:
我一直在使用以下配方来只允许我的应用程序的单个实例: http://code.activestate.com/recipes/474070-creating-a-single-instance-application/
配方使用一个“mutexname”变量,其中填充了一些互斥值。如果我想创建自己独特的“互斥锁”,我该怎么做?另外,这个食谱是如何工作的?谁能解释一下?
谢谢
【问题讨论】:
我一直在使用以下配方来只允许我的应用程序的单个实例: http://code.activestate.com/recipes/474070-creating-a-single-instance-application/
配方使用一个“mutexname”变量,其中填充了一些互斥值。如果我想创建自己独特的“互斥锁”,我该怎么做?另外,这个食谱是如何工作的?谁能解释一下?
谢谢
【问题讨论】:
配方使用win32 api函数CreateMutex创建一个命名互斥体。互斥锁是一个系统对象,存在于您的应用程序进程之外。当使用已存在的名称调用 CreateMutex 时,GetLastError 返回 ERROR_ALREADY_EXISTS。配方检查此返回值,如果是则退出。您应该更改配方以使用不同的字符串作为 mutexname。选择其他人不太可能锁定的东西,因为如果他们这样做,您的应用程序将无法启动。
【讨论】:
str,它实际上是一个字节序列,unicode,它是一个字符序列(Unicode 代码点)。配方显示了str 的使用,因为默认情况下 Windows API 是非 Unicode。 CreateMutex 的 Windows API 文档声称:“名称仅限于 MAX_PATH 字符,并且可以包含除反斜杠路径分隔符 () 之外的任何字符。名称比较区分大小写。”