gpt4 book ai didi

c++ - 你真的可以用 WaitFor...Object(s) 来等待条件变量吗?

转载 作者:可可西里 更新时间:2023-11-01 14:41:10 27 4
gpt4 key购买 nike


我正在尝试对许多 CONDITION_VARIABLE 实现某种等待。
The answers here暗示 WaitForMultipleObjects 等在处理 Windows API(以及互联网上的更多地方)时是有效的选项,但似乎并非如此。

首先,在 MSDN 文档中没有任何地方写到 Windows 条件变量是 WaitFor... 函数的有效参数。
其次,WaitFor... 似乎只接受HANDLE 类型作为参数,这基本上是一个内核对象。但是 PCONDITION_VARIABLE 并不是真正的 HANDLE
最后,尝试使用条件变量(作为 PCONDITION_VARIABLE 和未记录的 CONDITION_VARIABLE::Ptr)会使函数返回错误代码 6(无效句柄)

例如:

    CONDITION_VARIABLE cv;
InitializeConditionVariable(&cv);
auto res = WaitForSingleObject(cv.Ptr, INFINITE); //returns immediately
if (res != WAIT_OBJECT_0) {
auto ec = GetLastError();
std::cout << ec << "\n";
}

那么,您真的可以等待条件变量还是只是一个都市传说?

最佳答案

我不这么认为,这没有任何意义。

首先,WaitForXxx 函数(主要)在调度程序对象上运行 - 内核对象的一个​​子集,包括计时器、事件、互斥锁、信号量、线程和进程(以及一些内部对象类型,如KAGTEKQUEUE,但不包括访问 token 或文件映射对象)具有 DISPATCHER_HEADER。它肯定不会在内核不知道的用户模式构造上工作。

其次,请注意,当您在条件变量上休眠(“等待”)时,您必须通过使用正确的函数来指定这是基于临界区的条件变量还是基于 SRWL 的条件变量 - SleepConditionVariableCS SleepConditionVariableSRW。同样,Windows(不仅是内核)不知道您传递给它的是哪种条件变量,但它需要此信息才能正确运行。由于您没有向 WaitForXxx 提供此信息,因此它们不能与条件变量一起使用。

关于c++ - 你真的可以用 WaitFor...Object(s) 来等待条件变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37522108/

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