【问题标题】:Is there a C++ cross platform "named event like the "CreateEvent()" in Win32?是否有 C++ 跨平台“命名事件,如 Win32 中的“CreateEvent()”?
【发布时间】:2010-04-19 02:30:30
【问题描述】:

我正在寻找类似于 Win32 世界的 CreateEvent()、SetEvent() 和 WaitForMultipleObjects() 的东西。

具体来说,这必须可以跨同一台机器上的进程访问。

我们已经将 Poco 用于一些跨平台的东西,但我不认为 Poco::Event 是我想要的。也许我错过了什么。

编辑:

解释我想做什么:

我希望进程 B 知道进程 A 何时发生某些事情。这在 win32 中是微不足道的 - 每个进程/线程调用 CreateEvent() 并为事件命名。当发生某些事情时,进程 B 调用 waitForXObject() 并且进程 A 调用 SetEvent()。 B 发出信号。

同样,这在 win32 中是微不足道的,但如何跨平台。

【问题讨论】:

  • 你能解释更多你想要做什么吗?没有 C++ 等价物,那里有可能对您有用的库。在我看来,您可能需要一些中间件来放置您的东西(当然我猜)
  • @Romain - 我添加了详细信息。我知道没有 C++ 原语。我正在寻找的是在 C++ 中实现它的方法,而不是语言更改。
  • 看我的回答你想要 boost::named_condition,没有像 boost 这样的库,没有内置的 c++ 方法可以做到这一点。
  • 我知道在 C++ 中没有办法 - 这就是我查看 Poco 的原因。对我来说,如何使用 boost 并不明显——你如何“命名”事件/信号/条件?
  • 哦 - 现在我看到了“命名”部分。谢谢

标签: c++ events cross-platform signals


【解决方案1】:

C++ 中没有内置方法来执行命名事件。但是你可以使用 boost 来做到这一点。

您正在寻找boost::conditionboost::named_condition

正如你也提到存在:Poco.NamedEvent

【讨论】:

  • 我一定遗漏了一些东西——如何指定特定的互斥体/条件?
【解决方案2】:

boost 有许多这样的跨平台线程原语。

看看 boost:mutex

其实看看Cross-Platform equivalent to windows events

【讨论】:

  • 我在发布之前最初搜索 SO 时看到了这一点 - 但没有看到在该答案中“命名”事件的方法。
  • 该线程的结论:boost 或 Qt,无论你喜欢哪个
【解决方案3】:

哎呀 - 在看到布赖恩关于命名事件的回答后,我似乎错过了 Poco 的解决方案:

http://pocoproject.org/docs/Poco.NamedEvent.html

我只看过 Poco.Event

我们可能会使用它,因为它在客户端代码中似乎更简单、重量更轻。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多