有没有办法找出win32信号量的当前计数?

Ben*_*hoo 6 winapi semaphore

我正在寻找一种没有副作用的方法.

理想情况下,以下代码可以解决这个问题:

long currentCount = 0;  
::ReleaseSemaphore(h, 0, &currentCount);  
Run Code Online (Sandbox Code Playgroud)

但不幸的是,0不允许作为lReleaseCount的值,因此调用返回FALSE.

小智 5

这可能有点太晚了,但我认为 NtQuerySemaphore() 可能就是您想要看的。


Len*_*ate 4

如果您想要外部监控的值(正如您在评论中建议的那样),那么要么在调用后使用以前的值,ReleaseSemaphore()要么恕我直言,更好的解决方案是除了信号量之外还实现自己的“互锁”计数器;然后你就有了你的监控计数,并且可以以任何你喜欢的方式访问它......只是不要用它作为查看是否可以“输入”信号量的方式......

正如克里斯所说,您无法获取当前计数,因为它可能总是在变化。