WaitForMultipleObjects 会修改*多个*对象的状态吗? [复制]

2024-02-16

使用时WaitForMultipleObjects(... /*bWaitAll=*/FALSE ...) http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025%28v=vs.85%29.aspx该函数显然会修改导致其返回的第一个同步对象的状态。也就是说,如果您有信号自动重置event http://msdn.microsoft.com/en-us/library/windows/desktop/ms682396%28v=vs.85%29.aspx,返回值表明this事件对象导致函数返回,这肯定已经被重置。

但是,请考虑您有的情况multiple对象 - 此处:

When bWaitAll is FALSE,该函数检查数组中的句柄 从索引 0 开始,直到其中一个对象收到信号为止。如果多个对象发出信号,该函数将返回对象的索引 第一个句柄在其对象被发出信号的数组中。

因此,您只能返回第一个句柄,并且不知道该索引之后是否有任何事件已发出信号。

对于状态被修改的对象,现在的问题是,如果在 WaitForMultipleObjects 返回时已发出多个对象的信号,则仅修改第一个对象的状态,或者所有有信号的对象都会被重置吗?

文档确实指出:

该函数修改某些类型同步的状态 对象。修改仅针对对象发生或物体谁的 有信号状态导致函数返回。

因此这表明多个对象确实可以修改其状态。然而,这slightly与以下说法相矛盾:

...该函数检查数组中的句柄 从索引 0 开始,直到其中一个对象收到信号为止。 ...

此外,这意味着不可能将此函数与状态已修改的多个同步对象(例如自动重置事件、信号量等)一起使用,因为您总是会丢失信息。


我找到了一个声明这是“多个句柄时 WaitForMultipleObjects 的行为...”的答案 https://stackoverflow.com/a/680392/321013其他人会得出这样的结论(根据那里的评论):

WaitForMultipleObjects() 从 0 开始扫描句柄数组并 一旦找到有信号的句柄就返回。仅限第一个发现的 句柄重置为无信号状态;其他的则未受影响。 – 用户82238 / 2009 年 3 月 25 日 19:27

但想重新询问并可能明确确认这一点。


还有一个CodeGuru 上的有趣讨论 http://forums.codeguru.com/showthread.php?499419-How-can-I-get-all-the-signaled-events-after-WaitForMultipleObjects%28%29-returned,这似乎并没有说明这一点。


出色地。瓦达亚知道。

评论来自陈雷蒙德 https://stackoverflow.com/users/902497/raymond-chen:

如果等待一个事件,则仅修改该事件。如果 等待所有事件,然后所有事件都被修改。这就是 文档意味着“一个或多个对象”。单数,如果等等, 复数,如果等等。 – 雷蒙德·陈

这将与文档相匹配,就像在包含以下内容的段落之前一样“一个或多个物体”,在相同条件下Remarks小标题,我们find http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025%28v=vs.85%29.aspx:

当bWaitAll为TRUE时,函数的等待操作仅完成 当所有对象的状态都已设置为有信号时。功能 不修改指定对象的状态,直到状态 所有对象的已设置发出信号。

因此,要回答这个问题,可以得出以下结论:如果bWaitAll==FALSE then only第一个对象(报告为返回索引的对象)的状态已更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WaitForMultipleObjects 会修改*多个*对象的状态吗? [复制] 的相关文章

随机推荐

  • AndroidAnnotations + Android Studio - 找不到生成的 null.R 类

    我已经使用最新版本的 AndroidStudio 按照 wiki 说明设置了 ActiveAndroid 我正在使用产品口味 这是我的 gradle 构建文件 apply plugin android apply plugin androi
  • 为什么 IE10 中的“font-size: 1em”比 Chrome 中的字体大?

    我目前正在开发一个网站 我不明白为什么文本在 IE10 中显示比在 Chrome 中更大 我已确保两个浏览器都设置为 100 缩放 不多也不少 我的 CSS 已重置 body font size 1em 在 Chrome v27 0 145
  • 如何使用 ggplot2 在同一绘图区域内绘制绘图的缩放?

    这个问题看起来很难理解 但是为了说明一下 我举个图来举例 我正在尝试复制这张图 到目前为止 我已经单独完成了图形 但我不知道如何将它们组合在一起 如示例所示 有什么帮助吗 time lt seq from 0 to 10 by 0 5 li
  • 文件夹被锁定,无法解锁

    当我尝试更新或提交项目中的代码时 它告诉我该文件夹已锁定 当我尝试 释放锁定 时 它说该工作空间中没有任何内容可以解锁 这意味着什么 为什么我无法更新 提交甚至清理项目 右键单击您的 Subversion 工作目录文件夹 然后选择Torto
  • 在 Macos 上,rails new 失败并显示“无法设置其他经过身份验证的数据”

    我正在尝试让 ruby on Rails 在带有 M1 芯片的新 Mac 上运行 跑步rails new之后失败append gitignore出现以下错误 Library Ruby Gems 2 6 0 gems activesuppor
  • VS2010 程序集加载错误

    当我尝试在 Visual Studio 2010 中构建 ASP NET 4 项目时 出现以下错误 无法加载文件或程序集 file C Dev project trunk bin Elmah dll 或其依赖项之一 不支持操作 HRESUL
  • 如何将容器作为服务的参数

    在我的服务构造函数中 public function construct EntityManager entityManager SecurityContextInterface securityContext this gt securi
  • Tastypie 和原始 sql

    如何让 Tastypie 获取原始 SQL 查询集 queryset Foo objects raw sql 似乎不起作用 难道不可能吗 queryset super class name self get query set return
  • runnodes 时发生非法反射访问操作

    我正在尝试运行我的 corda 节点 但我遇到了一个奇怪的问题 节点正在正确启动 正如您在日志中看到的那样 C Repositorio cordapp template kotlin build nodes gt runnodes log
  • 如何在 Python (2.7 + ) 中等待 ENTER 键按下? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想知道一种简单的方法来等待用户按下特定的键 例如 Enter 或 Escape 但不是两者 然后在感应到按键后进一步执行代码 Try r
  • 如何在 Laravel 项目中添加 jQuery

    我是 Laravel 框架的新手 我想在使用 Laravel 框架构建的 Web 应用程序中使用 jQuery 但不知道怎么链接jQuery 库在 Laravel 项目中 你可以使用在线图书馆
  • 在数据框的列上进行 Strsplit [重复]

    这个问题在这里已经有答案了 我有一个data frame其中变量之一是向量 或列表 如下所示 MyColumn lt c A B C D E F G MyDF lt data frame group id 1 4 val 11 14 cat
  • 如何使用正则表达式搜索带括号的字符串?

    我有一个 txt 文件 其中包含以下字符串 A 123 B 456 Ab 123 我想搜索Ab 123 在txt文件中 我尝试过的 re search r Ab 123 string 有 12 个具有特殊含义的字符 您可以使用以下命令转义到
  • 与 preg_match_all 匹配

    我得到这个正则表达式 val 123 4 56 regex preg match all regex val matches 谁能告诉我为什么这只匹配最后一个数字 56 而不是每组数字 这是上面的正则表达式运行后 matches 包含的内容
  • 使用不带 InvokePattern 或 clickablePoint 的 UI Automation在单击按钮时调用

    我尝试将点击消息发送到 或调用 另一个应用程序中的按钮 我使用 UISpy exe 并可以找到我需要的元素 但它没有 id 没有 clickablePoint 也没有 Invoke 模式 我尝试了以下代码 var processStartI
  • 一种为对象数据库建立索引的方法

    我正在使用对象数据库 ZODB 来存储许多对象之间的复杂关系 但遇到了性能问题 因此 我开始构建索引以加快对象检索和插入速度 这是我的故事 希望对您有所帮助 最初 当我向数据库添加对象时 我会将其插入专用于该对象类型的分支中 为了防止多个对
  • 没有 JDK 的 JRE 6 (Windows) 上的堆转储

    有没有办法在没有安装 JDK 的远程计算机上创建堆转储 我无法更改安装 设置 并且它在 Windows 上运行 所以我可以随时访问命令行工具 问题是远程计算机上的 Java 应用程序冻结 没有内存不足异常 因此 XX HeapDumpOnO
  • JAXB 解组忽略命名空间将元素属性变成 null

    我正在尝试使用 JAXB 将 xml 文件解组为对象 但遇到了一些困难 实际项目的 xml 文件中有几千行 因此我以较小的规模重现了错误 如下所示 XML 文件
  • 防止“xmlValue”剥离
    标签

    我遇到了一个问题 其中xmlValue剥离 br 我需要保留的标签 或转换为其他角色 然后我可以strsplit on 这是一个例子 gt f lt htmlParse getForm http sites target com site
  • WaitForMultipleObjects 会修改*多个*对象的状态吗? [复制]

    这个问题在这里已经有答案了 使用时WaitForMultipleObjects bWaitAll FALSE http msdn microsoft com en us library windows desktop ms687025 28