在动态加载的库之间共享boost :: asio :: io_service对象

时间:2011-01-26 10:53:29

标签: c++ boost dll boost-asio

首先我做了什么(如果不是我做一些简单的愚蠢的事情,将提供最低样本):

我有一个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

1 个答案:

答案 0 :(得分:2)

我会检查几个选项:
*也许对象在某个时刻被复制而不是通过引用传递;你可以使它升级:: noncopyable以防止这种情况发生 *检查poll的返回值是否大于0运行某个处理程序;如果它是0则问题是提升认为没有处理程序。
*在GUI应用程序中添加一个测试处理程序,以排除与DLL相关的选项问题。

快乐的调试!