【发布时间】:2011-01-26 10:53:29
【问题描述】:
首先我做了什么(如果不只是我做一些愚蠢的事情,将提供最低限度的样本):
我有一个 GUI 应用程序,它应该支持多个网络接口来更改 GUI 中显示的内容。网络接口被实现为在 GUI 启动时动态加载的插件。 GUI 应用程序提供了一个 boost::asio::io_service 对象,它通过对接口的引用传递,以便他们可以使用它来构建异步 I/O。在 GUI 线程中,这个 io_service 对象被轮询以同步网络接口对内容的访问。
现在的问题是处理程序在轮询时不会被 io_service 对象调用。为了缩小这个范围,我只实现了一个接口并在其中创建了 io_service 对象,仍然从 GUI 线程调用轮询并且工作正常。
我现在的问题是:将 io_service 对象传递给在运行时加载的 DLL 函数是否可能存在一般问题?
如果场景太不清楚,我将提供一个最简单的示例。
编辑:我觉得真的很愚蠢 :) 只是拼凑了一个最小的例子,这 - 当然 - 就像一个魅力。这几乎意味着问题源于软件的其他部分。
感谢大家的意见!
为了让这个问题至少有点用处: 任何想做类似事情的人(通过 boost::asio::io_service 同步的网络插件),您可以下载最小示例here。
【问题讨论】:
-
场景很清楚,但举个例子肯定会有所帮助。
-
任意数量的 DLL 使用相同的 io_service 没有任何问题,更重要的是,它可以被任意数量的线程使用(如果您知道自己在做什么)。所以请提供启动异步操作和轮询的示例
-
是的,好像我在其他时候犯了一些错误。这种情况应该可以正常工作。
标签: c++ boost dll boost-asio