首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Solac单线程C应用

Solac单线程C应用
EN

Stack Overflow用户
提问于 2018-09-03 09:35:59
回答 1查看 190关注 0票数 0

刚刚开始使用C APISolac。但是我发现如果我使用solac,应用程序将是多线程的。我有C应用程序,它是单线程,有多个连接(例如,TCP,UDP,文件,timerfd)我正在使用epoll轮询。互相依赖的人。我想使用Solac作为epoll上的另一个连接。我希望将我的应用程序保持为单线程,因为它有依赖关系。如果可以在单线程中使用Solac连接,请有人帮助我。

你好,赛义德·莫明

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-05 02:49:26

拥有一个单独的上下文线程,用于FD处理和Solace内部的所有内容都是默认行为。

这可以通过各种方式进行更改,但请务必阅读https://docs.solace.com/Solace-PubSub-Messaging-APIs/Developer-Guide/C-API-Best-Practices.htm中的“选择线程模型”和“文件描述符管理”

假设您希望自己运行epoll_wait()并管理API的FDs,下面是所需内容的指导方针。这假设只有一个上下文。

  1. 禁用上下文线程的自动创建。 contextPropsctxtIndex++ = SOLCLIENT_CONTEXT_PROP_CREATE_THREAD;contextPropsctxtIndex++ = SOLCLIENT_PROP_DISABLE_VAL;
  2. 用您自己的FD管理功能填充solClient_context_createFuncInfo_t中的solClient_context_create()
代码语言:javascript
运行
复制
- `solClient_context_registerFdFunc_t` and
- `solClient_context_unregisterFdFunc_t`.

前者用于EPOLL_CTL_ADD/MOD和注册回调函数,后者用于EPOLL_CTL_DEL/MOD。注意:

代码语言:javascript
运行
复制
- `SOLCLIENT_FD_EVENT_ALL` ~ `EPOLLIN | EPOLLOUT`
- `SOLCLIENT_FD_EVENT_READ` ~ `EPOLLIN`
- `SOLCLIENT_FD_EVENT_WRITE` ~ `EPOLLOUT`

Solace将通过这些定义的函数注册自己的FD事件回调。

  1. 在您的主epoll循环中:
代码语言:javascript
运行
复制
- `epoll_wait()` with timeout = `SOLCLIENT_CONTEXT_PROP_DEFAULT_TIME_RES_MS`
- call `solClient_context_timerTick()` every `epoll_wait()` timeout
- make callbacks to FD events

查找Solace参考,以获得关于此答案中所述符号的更多详细信息:https://docs.solace.com/API-Developer-Online-Ref-Documentation/c/index.html

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

https://stackoverflow.com/questions/52147003

复制
相关文章

相似问题

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