【问题标题】:Is there a C++ equivalent of WaitforSingleObject?是否有相当于 WaitforSingleObject 的 C++?
【发布时间】:2014-09-26 09:48:57
【问题描述】:

我需要重写一些使用 windows WaitforSingleObject 函数的代码。

myEvent = CreateEvent( NULL, FALSE, FALSE, szName );
WaitForSingleObject( myEvent, nMilliseconds );

我需要等待事件或超时发生。 在直接 C++ 中是否有与此等价的功能?

我使用的是 STL C++11,而不是任何其他库,例如 boost。

【问题讨论】:

标签: c++ multithreading c++11 waitforsingleobject


【解决方案1】:

您不能将 C++11 线程例程与 win32 线程一起使用(除非您严重搞乱了 mingw 线程实现,我不建议这样做),并且没有与特定于操作系统的 API 调用等效的标准 C++。

但是,您可以使用 C++11 线程并使用 condition variables(cfr.等待)来完成与 WaitForSingleObject 相同的事情,即

  • 等待对象处于信号状态
  • 等到超时结束

编辑:特别是你需要wait_until

【讨论】:

  • API 调用的等效项是wait_for,而不是wait_until
  • Visual Studio 的 <thread> 可以安全地与 winapi 线程混合吗?
  • “搞砸了 mingw 线程”——这不仅仅是 mingw 的事情。 VS 还实现了<thread> 库,同样,混合 Win32 和 C++ 线程可能会导致不利的问题 - 它们不会自动兼容。 IIRC,VS 使用 ConcRT 来实现 C++ 线程组件。
  • 一些 mingw 构建确实使用 windows 线程模型,不记得是哪些,但无论如何它可能很常见
【解决方案2】:

是的,您只能使用 C++11。这是一个示例(此处太长无法粘贴):https://github.com/moya-lang/Event/blob/master/Event.h。该代码完全模仿 WINAPI 事件对象,因此这是您所要求的。

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多