gpt4 book ai didi

c - Solac 单线程 C 应用程序

转载 作者:行者123 更新时间:2023-11-30 16:28:56 27 4
gpt4 key购买 nike

刚刚开始使用 C APISolac。但我发现如果我使用 solac,应用程序将是多线程的。我有一个 C 应用程序,它是单线程并且有多个连接(例如 TCP、UDP、FILE、timerfd),我正在使用 epoll 进行轮询。它们相互依赖。我想使用 Solac 作为 epoll 上的另一个连接。我想将我的应用程序保留为单线程,因为它具有依赖性。如果可以在单线程中使用 Solac 连接,请有人帮助我。

问候,赛义德·莫明

最佳答案

默认行为是为 FD 处理和 Solace C API 内部的所有内容提供单独的上下文线程。

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

假设您想自己运行 epoll_wait() 并管理 API 的 FD,下面是所需内容的指南。这假设有一个上下文。

  1. 禁用上下文线程的自动创建。

    contextProps[ctxtIndex++] = SOLCLIENT_CONTEXT_PROP_CREATE_THREAD; 
    contextProps[ctxtIndex++] = SOLCLIENT_PROP_DISABLE_VAL;
  2. solClient_context_create() 中填写您自己的 FD 管理函数中的 solClient_context_createFuncInfo_t:

    • solClient_context_registerFdFunc_t
    • solClient_context_unregisterFdFunc_t

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

    • SOLCLIENT_FD_EVENT_ALL ~ EPOLLIN | EPOLLOUT
    • SOLCLIENT_FD_EVENT_READ ~ EPOLLIN
    • SOLCLIENT_FD_EVENT_WRITE ~ EPOLLOUT

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

  3. 在主 epoll 循环中:

    • epoll_wait() 超时 = SOLCLIENT_CONTEXT_PROP_DEFAULT_TIME_RES_MS
    • 每隔 epoll_wait() 超时调用 solClient_context_timerTick()
    • 回调 FD 事件

查找 Solace C API 引用,了解有关此答案中所述符号的更多详细信息: https://docs.solace.com/API-Developer-Online-Ref-Documentation/c/index.html

关于c - Solac 单线程 C 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52147003/

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