首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >boost::asio内部线程

boost::asio内部线程
EN

Stack Overflow用户
提问于 2013-02-20 21:40:48
回答 2查看 2.2K关注 0票数 5

当使用boost::asio进行一些异步TCP通信时,我注意到它会启动很多(3-4)个内部线程。在the documentation中阅读,它说

代码语言:javascript
运行
复制
"The implementation of this library for a particular platform may 
 make use of one or more internal threads to emulate asynchronicity"

现在,我的库有非常严格的要求,不能启动任何额外的线程(除了由客户机提供的、现在启动io_service::run()的线程)。有没有办法阻止boost::asio创建这些额外的线程?

或者,有没有其他只能在一个线程中运行的异步库?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-20 23:15:52

您可以通过在适当的转换单元中定义BOOST_ASIO_DISABLE_THREADS来禁用模拟的异步操作支持。The documentation对这个定义有这样的说法

显式禁用Boost.ASIO的线程支持,而不管Boost作为一个整体是否支持线程。

如果您没有找到platform specific implementation notes,它会清楚地说明哪些操作使用此仿真。例如,我知道在几乎所有的平台上,async_resolve()都是以这种方式模拟的,线程是在第一次调用async_resolve()时创建的。一些(全部?)Windows平台模拟其他几种操作,例如deadline_timer操作。

禁用线程支持的一种替代方法可能是避免这些模拟操作。我个人没有在项目中使用过BOOST_ASIO_DISABLE_THREADS,所以我不确定它是否有其他副作用。

票数 7
EN

Stack Overflow用户

发布于 2013-02-20 21:59:58

你是否真的测试过它,看看你的特定平台上是否产生了线程?如果没有,问题就解决了!如果有,您可以考虑使用不同的库,如libevent或libev。其中任何一个,或者像Qt这样的各种库提供的一大堆其他异步事件循环都可以工作。

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

https://stackoverflow.com/questions/14981291

复制
相关文章

相似问题

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