【问题标题】:asynchronous Inter thread communication异步线程间通信
【发布时间】:2010-08-15 10:17:46
【问题描述】:

我正在制作一个跨平台程序,它嵌入了一个小型 RARP 服务器(使用 winpcap/pcap 实现)并运行 2 个 TCP IP 服务器。我必须使用 C++。

所以我将至少有 4 个线程,主要的线程包括控制器、2 个 TCP/IP 异步套接字和 RARP 服务器。

我计划使用 c++ BOOST Asio 和 Thread,因为我需要在 linux 和 windows XP 中运行这个程序。 (而且我不能使用 Qt)

我将执行异步线程间通信。

例如循环内的触发事件而不阻塞循环

我该怎么做?最好有便携式图书馆。

谢谢

【问题讨论】:

  • 我认为如果你问这个问题的更窄版本,你会更幸运地得到答案。您在这里有几个问题,有些与其他问题无关....非常分散。

标签: c++ multithreading events boost signals


【解决方案1】:

对此没有通用的解决方案,您不能只是中断线程并传递要处理的通知。这会导致可怕的重入问题和大量僵局。只有当线程处于静止状态时才能处理通知。

操作系统通常具有使之成为可能的可用服务。在 Windows 中,这通常通过将消息发布到消息队列来完成。由消息循环读取,这是 UI 线程的“空闲”状态。或者通过利用异步过程调用,在线程阻塞并明确允许 APC 运行时触发。

但是您通过需要非平台特定的解决方案来切断这一点。在这种情况下,您几乎注定要重新发明操作系统功能。您需要在需要接收通知的线程中轮询的线程安全队列。消息队列,由消息循环读取。

【讨论】:

  • 因为我已经在使用 boost asio,所以我使用 boost asio io_service 对象来进行异步函数调用。谢谢。
【解决方案2】:

看看ICE messaging

它支持进程之间的同步和异步消息传递,无论它们是否在同一个节点上。

有 C++、Obj-C、Java、C#、Python、Ruby 和 PHP 的绑定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 2012-03-06
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2020-11-18
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多