WaitForSingleObject超时解决

2023-12-19

当我使用等待非信号事件时等待单个对象函数中,我发现在某些情况下调用会在小于指定的超时期限内返回 WAIT_TIMEOUT。只需在超时设置为 1000 毫秒的情况下循环调用,我就看到调用在低至 990 毫秒的时间内返回(在 WinXP 上运行)。我在用着查询性能计数器获得独立于系统时钟的时间测量,所以我认为时钟漂移可能不是答案。

这种行为不会给我带来任何实际问题,但我想更好地理解它。看起来它可能以大约计时器滴答的分辨率工作。 Microsoft 是否发布了有关此函数精度的更多详细信息?我应该期待 Vista 中更高的精度吗?


是的,WaitForSingleObject 使用计时器刻度分辨率,它不使用像 QueryPerformanceCounter 这样的高分辨率计时器。

http://msdn.microsoft.com/en-us/library/ms687069(VS.85).aspx http://msdn.microsoft.com/en-us/library/ms687069(VS.85).aspx,关于“等待函数”的 MSDN 文章对此进行了扩展:

指定超时的准确度 间隔取决于分辨率 系统时钟。系统时钟 以恒定的速率“滴答”。如果 超时间隔小于 系统时钟的分辨率, 等待可能会在小于 指定的时间长度。如果 超时间隔大于一 勾选但少于两个,等待即可 介于一到两个刻度之间, 等等。

本文还解释了如何使用 timeBeginPeriod 来提高系统时钟分辨率 - 但不建议这样做。

我可以想到几个原因。首先,几乎所有 WaitForSingleObject 用例都不需要更高的分辨率。使用高分辨率定时器需要内核不断轮询定时器(不可行,因为不能保证内核代码始终运行)或频繁重新编程以生成中断(因为可能有多个 WaitForSingleObjects,并且很可能只有一个)可编程中断)。

另一方面,已经有一个可以不断更新的定时源,其分辨率对于 WaitForSingleObject、SetWaitableTimer 和 Sleep 来说已经足够好了。

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

WaitForSingleObject超时解决 的相关文章

随机推荐

  • 捕获并打印完整的 Python 异常回溯,无需停止/退出程序

    我想捕获并记录异常而不退出 例如 try do stuff except Exception as err print Exception err I want to print the entire traceback here not
  • 生成一定范围内的“n”个唯一随机数[重复]

    这个问题在这里已经有答案了 我知道如何在 Python 中生成一定范围内的随机数 random randint numLow numHigh 我知道我可以将其放入循环中以生成 n 个数字 for x in range 0 n listOfN
  • Python-删除uuencoding行

    我正在处理许多文本文件 其中 其中一些 包含 uuencoding 可以是 jpg 或 pdf 或 zip of xlsx 等 我不关心嵌入的 UUencoded 数据 所以我只想丢弃这些段落并保留其余文本 我正在努力思考如何想出一种只跳过
  • 在 pandas 中,如何查询列表?

    假设我有一个将列表作为其值的 DataFrame df pd DataFrame languages en fr author Dickens Charles Austen Jane 我可以轻松查询它的字符串 df df author Di
  • 如何在 Meteor 的服务器端调试并记录自己的代码?

    没关系 这不起作用的原因 我忘记了meteor reset so debugger没有机会停下来 呃 更多信息 我正在使用Mason Chang对相关问题的回答中的方法 而不是kill s USR1 proc id 我可以看到脚本 但无法在
  • 响应式高度/宽度视频标题

    我正在为一个网站制作一个响应式 html5 视频标题 我希望它能够垂直和水平响应 仅使用 CSS 来实现响应能力 http jsfiddle net b9cpmuy9是我用于响应宽度的 借用了这里另一篇文章的视频 width 100 hei
  • C++ 视图类型:按常量传递还是按值传递?

    最近在代码审查讨论中出现了这个问题 但没有得出令人满意的结论 所讨论的类型类似于 C string view TS 它们是围绕指针和长度的简单非拥有包装器 并用一些自定义函数装饰 include
  • Spring引导测试“没有可用的合格bean类型”

    我是 Spring boot 的新手 但这是我现在面临的问题 Application java public class Application public static void main String args SpringAppli
  • 我的编译器在做什么? (优化memcpy)

    我正在 VC 2010 中使用以下设置编译一些代码 O2 Ob2 Oi Ot 但是 我在理解生成的程序集的某些部分时遇到了一些困难 我在代码中添加了一些问题作为注释 另外 现代 cpu 上通常建议的预取距离是多少 我可以在我自己的 cpu
  • pandas concat 中的级别选项

    df1 DataFrame np arange 6 reshape 3 2 index a b c columns one two df2 DataFrame 5 np arange 4 reshape 2 2 index a c colu
  • 如何使用 jQuery 创建多个 HTML 元素?

    我想做的是使用 jQuery 创建一个表分页器控件 它包含大量链接和跨度 我已经设法通过简单的字符串连接来做到这一点 但我不敢相信 jQuery 不能让这变得更优雅 我不能在这里使用 jTemplates 因为该生成具有相当多的程序逻辑 问
  • 如何将 Npp8u * 转换为 CUdeviceptr

    我是cuda驱动程序Api接口的新手 但我认为CUdeviceptr看起来像一个句柄参数 所以我对CUdeviceptr和npp8u 之间的转换感到困惑 Npp8u src unsigned char temp temp src CUdev
  • 如何获取括号内的括号

    我试图将括号保留在由括号包围的字符串内 有问题的字符串是 test blue hmmm derp 所需的数组输出是 test and blue hmmm derp 当前输出为 blue hmm and derp 我当前的代码是this ht
  • jquery 基于单选按钮启用/禁用文本框

    在我的页面 jsp 中 我有一个单选按钮组和一个文本框 最初被禁用 每当用户单击单选按钮时 应启用文本框 当用户单击其他单选按钮时 文本框应再次被禁用 我可以使用下面的代码启用最初禁用的复选框 DevGroup OTHER click fu
  • 如何在现有项目上使用 Backpack for Laravel?

    我正在用 Laravel 构建一个小应用程序 我刚刚发现 Backpack 看起来非常漂亮 我下载了它 我有许可证 但我真的不知道如何将它与我现有的文件一起使用 到目前为止有 3 个控制器 3 个模型和一些刀片文件 也许答案就在文档中的某个
  • 如何实时检测对象并自动跟踪它,而不是用户必须在要跟踪的对象周围绘制边界框?

    我有以下代码 用户可以按p要暂停视频 请在要跟踪的对象周围绘制一个边界框 然后按 Enter 回车 以跟踪视频源中的该对象 import cv2 import sys major ver minor ver subminor ver cv2
  • EF4.1 使用按层次结构表继承创建数据库时出现异常

    我创建了一个非常简单的项目来演示每个层次结构表的继承 在我尝试生成数据库的单元测试中 根据配置 我收到了许多错误之一 没有Required method Map
  • WebRTC 无法将 Safari 与 Android 版 Chrome 连接

    WebRTC 无法将 Safari 与 Android 版 Chrome 连接 从桌面版 Chrome 到 Safari 都没有问题 另外 Safari Safari 没有任何问题 Apple 自 iOS 11 和桌面版 Safari 11
  • 启动新控制器时停止 $timeout

    我每 2 秒轮询一次数据 以使其在页面上保持更新 我的问题是当我访问另一个页面时超时保持活动状态 当我访问新页面时如何取消超时 function IndexCtrl scope timeout RestData scope rd funct
  • WaitForSingleObject超时解决

    当我使用等待非信号事件时等待单个对象函数中 我发现在某些情况下调用会在小于指定的超时期限内返回 WAIT TIMEOUT 只需在超时设置为 1000 毫秒的情况下循环调用 我就看到调用在低至 990 毫秒的时间内返回 在 WinXP 上运行