gpt4 book ai didi

c++ - 在动态加载的库之间共享一个 boost::asio::io_service 对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:34 24 4
gpt4 key购买 nike

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

我有一个 GUI 应用程序,它应该支持多个网络接口(interface)来更改 GUI 中显示的内容。网络接口(interface)实现为在 GUI 启动时动态加载的插件。 GUI 应用程序提供了一个 boost::asio::io_service 对象,它通过对接口(interface)的引用传递该对象,以便它们可以使用它来构建异步 I/O。在 GUI 线程中,轮询此 io_service 对象以同步网络接口(interface)对内容的访问。

现在的问题是处理程序在轮询时不会被 io_service 对象调用。为了缩小这个范围,我只实现了一个接口(interface)并在其中创建了 io_service 对象,仍然从 GUI 线程调用轮询并且它有效。

我现在的问题是:将 io_service 对象传递到运行时加载的 DLL 函数中是否可能存在一般问题?

如果场景太不清楚,我将提供一个最小示例。

编辑:我觉得真的很愚蠢 :) 只是拼凑了一个最小的例子,而且 - 当然 - 就像一个魅力。这几乎意味着问题源于软件的其他部分。

非常感谢大家的意见!

为了让这个问题至少有点用处:任何想做类似事情的人(通过 boost::asio::io_service 同步的网络插件),您可以下载最小示例 here .

最佳答案

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

调试愉快!

关于c++ - 在动态加载的库之间共享一个 boost::asio::io_service 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4803689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com