【问题标题】:What could cause the ResetEvent API to fail?什么可能导致 ResetEvent API 失败?
【发布时间】:2011-03-11 04:49:31
【问题描述】:

我正在编写一个 VC++ 应用程序。只是为了争论,什么可能导致ResetEvent API 失败? Microsoft 文档对此并不清楚。谢谢。

【问题讨论】:

  • 句柄无效? GetLastError 说什么?
  • 对于它的价值,我会说文档对此很清楚。它指出您应该将句柄传递给事件对象,并且该对象具有足够的访问权限。一旦你做到了,我认为它必须成功。

标签: c++ winapi


【解决方案1】:

最常见的无效句柄会导致失败。反过来,无效句柄可能由以下原因导致:

  1. 句柄被另一个进程或线程过早关闭
  2. 将 gobbledy-gook 传递给 ResetEvent()
  3. 将句柄传递给非偶数对象

通常可以通过调用DuplicateHandle() 创建句柄的副本来避免使用数字 1。

GetLastError() 通常会准确地告诉您问题所在,或者至少为您指明方向。

【讨论】:

    【解决方案2】:

    无法访问 Windows 的源代码,我们只能猜测。以下是我对可能出错的猜测:

    • 句柄不是事件对象的有效句柄。
    • 句柄没有必要的访问权限。文档指出句柄必须具有 EVENT_MODIFY_STATE 访问权限。
    • 操作系统内存不足或出现其他严重故障。

    读取 WINE 源代码没有发现其他明确的故障模式。

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多