【问题标题】:What is the equivalent linux API for WaitForMultipleObjects() and WSAEnumNetworkEvents()?WaitForMultipleObjects() 和 WSAEnumNetworkEvents() 的等效 linux API 是什么?
【发布时间】:2012-12-04 12:46:46
【问题描述】:

WaitForMultipleObjects() 和 WSAEnumNetworkEvents() 的等效 linux API 是什么? 我们可以将 pthread_cond_wait() 用于 WaitForMultipleObjects 吗?

【问题讨论】:

标签: linux windows porting


【解决方案1】:

对于具有 Windows 背景的开发人员,我们在将一些代码从 Win32 移植到名为 pevents 的 pthreads pevents 时遇到了同样的问题,它在 Linux 上实现了 WaitForMultipleObjects(),同时支持自动和手动重置事件。它的行为方式应该与 Windows 上的 WIN32 事件相同。

【讨论】:

  • 甜蜜——我一直在为实现而苦苦挣扎。
  • pevents不实现轮询等待吗?如果是这样,它的功能就不是WaitForMultipleObject() API 的等价物,后者通过阻塞来执行等待。 (而且不会占用 CPU 时间。)
  • @mg30rg 我不知道你为什么会这么说/假设。 pevents 是完全异步和事件驱动的,使用本地 posix 同步原语来复制 Windows 的行为。这绝对是不是投票解决方案。
【解决方案2】:

好吧,Linux 中没有直接的 API,与 WaitForMultipleObjects() 等效。

WaitForSingleObject and WaitForMultipleObjects equivalent in Linux? 包含对第一部分的答案,也许还有更好的解释。

对于WSAEnumNetworkEvents(),在Linux 中,根据您的要求使用poll()select()。另一个应用程序libevent 也可能有用。

参考:

【讨论】:

  • 感谢您的快速回复,如果 select() 用于此,那么我们应该为 WSAEventSelect() 使用什么?或者我们应该对 WSAEventSelect() 使用 select 并为 WSAEnumNetworkEvents() 使用 poll ??
  • 如果我没记错的话, select() 用于为读/写/关闭网络事件注册新套接字,而 poll() 如您所建议的将用于检查哪个网络事件(读/写/关闭)发生了..?
  • This link 会更好地回答您的问题。 :)
  • 我还建议通过this link 来更好地理解示例。如果您仍然需要帮助,我将很乐意提供帮助。 :)
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多