OpenMutex()
始终返回不同的句柄地址是否正常?文档说如果成功则返回HANDLE
,否则返回NULL
。
OpenMutex的每个实例都返回一个不同的句柄......
m_logMutex定义为static HANDLE
。
m_logMutex = OpenMutex(SYNCHRONIZE, FALSE, LOGMUTEX);
if(m_logMutex == NULL) {
m_logMutex = CreateMutex(NULL, FALSE, LOGMUTEX);
}
另外,由于这是名为,为什么甚至会有静态HANDLE?这是程序的一部分,可以将来自不同进程的数千个事务存档到同一个数据库中。我发现我的静态HANDLE被更改为不同的句柄并导致WAIT_FAILED
错误
答案 0 :(得分:1)
这里有一个细微的区别:通话不会返回 句柄。该调用返回 a 句柄。
只要检索到的句柄允许您执行您要求的操作(即安全权限),一切都很好。只是不要假设没有明确记录的句柄。
另外,由于这个名字,为什么甚至有一个静态的HANDLE?这是程序的一部分,可以将来自不同进程的数千个事务存档到同一个数据库中。
static
指的是你的变量。它不是手柄本身的属性。
我发现我的静态HANDLE被更改为不同的句柄并导致WAIT_FAILED错误
只要您不关闭手柄(并且可能在需要的地方DuplicateHandle()
),就不会发生这种情况。如果你CloseHandle()
它,它当然会变得无效。如果在程序的各个部分之间传递句柄,出于同样的原因,应该小心句柄的所有权。如果您在进程之间传递句柄,则必须调用DuplicateHandle()
。
除此之外,它非常简单。手柄没有黑魔法。