首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用同一库的多个实例

如何使用同一库的多个实例
EN

Stack Overflow用户
提问于 2012-02-06 18:46:16
回答 3查看 275关注 0票数 1

我必须扩展一个C程序来控制单个无人机(parrot无人机)。目标是控制一个中队的无人机,但API使用了大量的全局变量(无人机IP、端口、无人机状态...)。如何在实例之间不发生“冲突”的情况下多次实例化库?

我找到的唯一解决方案是修改API (这是开源的),在main()函数中的某个地方调用fork(),我想避免这种情况……

EN

回答 3

Stack Overflow用户

发布于 2012-02-06 19:02:48

我建议只将库包装在一个服务进程中。然后,您可以为每个无人机运行服务进程的一个实例。否则,修复该库以获取上下文参数。

票数 1
EN

Stack Overflow用户

发布于 2012-02-06 19:03:33

dlmopen可以多次加载一个库。但它被限制在15次。

您还可以创建库的多个副本并加载每个副本。

票数 1
EN

Stack Overflow用户

发布于 2012-02-06 22:40:41

使用宏来替换所有全局变量,如下所示:

代码语言:javascript
运行
复制
#define global1 ctx->global1
#define global2 ctx->global2
...

然后为每个函数添加一个struct context *ctx参数。

或者,向每个全局变量添加_Thread_local (或者使用旧版本的gcc的__thread ),然后在它自己的线程中运行每个“实例”,这样它自然就有自己的全局变量副本可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9158931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档