繁体   English   中英

命名互斥对象的不同HANDLE结果

[英]DIfferent HANDLE results for Named Mutexes

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错误

有一个在这里细微的差别:调用不返回句柄。 该调用返回一个句柄。

只要检索到的句柄允许您执行所要求的操作(即安全权限),就可以了。 只是不要对未明确记录的手柄做出任何假设。

另外,由于已命名,为什么还要有静态的HANDLE? 这是程序的一部分,该程序可以将来自不同进程的数千个事务归档到同一数据库中。

static引用您的变量。 它不是句柄本身的属性。

我发现我的静态HANDLE更改为其他句柄并导致WAIT_FAILED错误

只要您不关闭句柄(可能在需要的地方正确关闭DuplicateHandle() ,就不会发生这种情况。 如果您使用CloseHandle() ,它当然将无效。 如果在程序的各个部分之间传递句柄,则出于相同的原因,应谨慎使用该句柄的所有权。 而且,如果在进程之间传递句柄,则必须调用DuplicateHandle()

除此之外,这非常简单。 手柄不涉及黑魔法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM