gpt4 book ai didi

c++ - 你如何获得当前信号量的计数?

转载 作者:太空狗 更新时间:2023-10-29 21:50:02 25 4
gpt4 key购买 nike

我正在尝试调试一个使用 CSemaphore 的多线程程序限制缓冲区的大小。

如何从这个类中获取信号量计数器的当前值?它似乎不能从它的任何成员直接访问,而且我似乎也找不到任何能给我它的函数。

最佳答案

你不应该关心 - 这是一个信号量,而不是线程共享计数器。

也就是说,您可能会滥用 ReleaseSemaphore API 的 lpPreviousCount 输出参数

BOOL WINAPI ReleaseSemaphore(
__in HANDLE hSemaphore,
__in LONG lReleaseCount,
__out_opt LPLONG lpPreviousCount
);

想法:

CSemaphore &mySemaphore = /*initialized from somewhere*/;

HANDLE hsem = (HANDLE) mySemaphore; // http://msdn.microsoft.com/en-us/library/f5zcch25.aspx
LONG peeked_count;
::ReleaseSemaphore(hsem, 1 /*can't be 0, sorry!*/, &peeked_count);

请注意,不幸的是,您必须实际释放信号量(lReleaseCount 必须 >0)

关于c++ - 你如何获得当前信号量的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7119986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com