代码之家  ›  专栏  ›  技术社区  ›  AndroidDev

两线程间通信的C++多线程数据结构

  •  0
  • AndroidDev  · 技术社区  · 14 年前

    我有一个线程可以调用COM接口的各种API。现在我想从另一个线程调用这些函数。你能告诉我如何做到这一点吗? 如何实现这两个线程之间的通信?如果我定义了一个消息队列类型的数据结构,这对于这两个线程来说很常见,那么如何定义一个通用的数据结构,因为每个COM API的参数都不同。

    提前谢谢

    3 回复  |  直到 14 年前
        1
  •  1
  •   Dialecticus    14 年前

    您没有定义一个通用的数据结构。每个不同的函数签名都有不同的数据结构。这些结构之间唯一的共同点是函数的标识符。在线程中,你会有巨大的开关(或STD::MAP),它将把函数标识符转换为函数本身。之后你就知道如何解释结构的其余部分了。结构应该有POD语义。

        2
  •  2
  •   San Jacinto    14 年前

    典型的方法是使用回调。通过指针传递数据。您可以使用多态性来重写当您将基类从队列中弹出时调用的方法。基调用函数x,您可以重写派生类中的函数x来实现您想要的。

    另一种方法是使用普通的旧回调。将函数的地址连同所需的任何数据一起传递到队列中,并将其完全封装在结构中。所有回调都必须具有相同的签名,因此您可能需要将数据强制转换为void。

        3
  •  1
  •   Steve Townsend    14 年前

    如果每个线程作为 single-threaded apartment 然后,您可以从远程线程调用所需的API,方法是将其接口指针作为 IStream 从对象的拥有线程到另一个线程,通过 CoMarshalInterThreadInterfaceInStream CoGetInterfaceAndReleaseStream . 一旦远程线程有了接口指针,就可以直接对其进行调用。

    您也可以使用 Global Interface Table ,取决于应用程序的线程模型。这是最简单的方法。