Boost::Asio :io_service.run() 与 poll() 或者如何在主循环中集成 boost::asio

2023-12-01

我目前第一次尝试使用 boost::asio 进行一些简单的 tcp 网络,我已经遇到了一些我不太确定如何处理的事情。据我了解 io_service.run() 方法基本上是一个循环,它运行直到没有什么可做的,这意味着它将运行直到我释放我的小服务器对象。由于我已经设置了某种主循环,为了简单起见,我宁愿从那里手动更新网络循环,而且我认为 io_service.poll() 会做我想要的事情,有点像这样:

void myApplication::update()
{
     myIoService.poll();
     //do other stuff
}

这似乎可行,但我仍然想知道这种方法是否有缺点,因为这似乎不是处理 boost::asios io 服务的常用方法。这是一种有效的方法还是我应该在非阻塞额外线程中使用 io_service.run() ?


Using io_service::poll代替io_service::run是完全可以接受的。差异的解释见文档

也可以使用 poll() 函数 派遣准备好的处理程序,但是 没有阻塞。

注意io_service::run如果有的话会阻止work留在队列中

工作类用于通知 io_service 工作开始时 完成。这确保了 io_service 对象的 run() 函数 工作正在进行时不会退出, 并且当没有时它确实退出 剩余未完成的工作。

whereas io_service::poll不表现出这种行为,它只是调用准备好的处理程序。另请注意,您需要调用io_service::重置在任何后续调用io_service:run or io_service::poll.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Boost::Asio :io_service.run() 与 poll() 或者如何在主循环中集成 boost::asio 的相关文章

  • java中应用程序的CPU核心数和线程数之间有什么关系?

    我是java新手多线程编程 我想到的问题是 根据我的数量 我可以运行多少个线程CPU核心数 如果我运行的线程超过CPU核心数机器运行应用程序会产生开销吗 例如 当我们有一台服务器计算机 其中有一个运行 2 个线程 主线程 开发人员线程 的服
  • 为什么这个 SIMD 数组添加示例与简单的实现相比没有表现出任何性能提升?

    class Program static void Main string args Console WriteLine Vector IsHardwareAccelerated SIMD supported SIMD not suppor
  • 反序列化 GUID 数组时出现 JSON.NET 异常

    我正在使用 JSON NET 反序列化从浏览器发送的 AJAX HTTP 请求 并且在使用 Guid 作为参数的 Web 服务调用时遇到问题 当我使用内置的 NET 序列化器时 这工作得很好 首先 流中的原始字节如下所示 System Te
  • 信用卡号应该存储为字符串还是整数?

    是啊 只是想想而已 我应该将在我的网站上输入的信用卡号存储为字符串还是整数 我的意思是 它们由数字组成 这让我认为它是一个整数 但我不对它们进行数学运算 所以也许字符串更合适 编辑 所以我必须在加密之前存储在某个时刻输入的数字 我可能应该更
  • boost::noncopyable 是如何工作的

    我在 C 实践中偶然发现了两个愚蠢的问题 据我所知 c 中的复制构造函数和赋值运算符不是继承的 那么 boost noncopyable 在这种情况下如何帮助禁止这些东西呢 class X private boost noncopyable
  • 我想要 Linux 上的 C 函数来收集核心转储而不终止进程

    abort 确实收集核心转储 但我不希望进程终止 dump core 收集核心转储 但在内核空间中 用户空间中是否有与 dump core 等效的函数 自己做的一个简单方法是fork进程 创建父进程的完整副本 并调用abort来自子进程 子
  • 如何使用仿函数作为类模板中的成员?

    我试图使用函子作为std function类模板内的对象 以下是我到目前为止所做的事情 the functor class template template
  • C++ 局部变量销毁顺序

    C 11 中是否存在局部变量释放的定义顺序 更简洁地说 同一作用域中两个局部变量的析构函数的副作用将以什么顺序变得可见 e g struct X X do something int main X x1 X x2 return 0 Is x
  • 创建一个从用户机密获取连接字符串的 DbContextFactory

    使用 DotNetCore 解决方案WebApi项目和一个单独的Data包含实体框架实现的项目 我们一直在升级库 因此我们使用所有最新的核心内容 In the Data项目 我们创建了一个ApplicationDbContextFactor
  • Unix 编程。不确定如何使用 passwd 结构

    我做了一些研究 但仍在努力解决passwd结构 http www opengroup org onlinepubs 000095399 basedefs pwd h html http www opengroup org onlinepub
  • CMake include_directories 和 add_subdirectories 之间的区别?

    我正在学习 CMake 来构建 C 代码 并努力解决以下概念 在我的根级目录中 我有一些 cpp 文件和 CMakeLists txt 它们在 gen cpp 目录中成功生成了一些 thrift 代码 我的根级别 CMakeLists tx
  • NHibernate 继承 - 判别器值

    NHibernate 是否可以有一个像这样工作的判别器 如果值等于 String Empty gt Class1 其他 gt Class2 我已经有一个 CultureName 字符串列 我想将其用作鉴别器 我不想添加额外的布尔列 如果 C
  • 我不明白这个霍夫曼算法的实现

    template
  • 传递给 WCF 服务的可选查询字符串参数

    我想知道如何使用 string limit WebOperationContext Current IncomingRequest UriTemplateMatch QueryParameters Limit 在我的wcf中这个方法 Cit
  • 如何在 JSON 输出上强制采用 ISO 格式“YYYY-MM-DDThh:mm:ss.sss”?

    我有一个 ASP NET WebApi2 api 它返回一些 JSON 格式的时间戳 时间戳具有毫秒分辨率 通常我会得到这种格式的时间戳 这很好 YYYY MM DDThh mm ss sss 不幸的是 如果时间戳恰好用整秒对日期进行编码
  • 如何隐藏鼠标光标?

    我想问是否有人可以为我提供一个 C 代码 在其中我可以在按下特定键时隐藏 显示鼠标指针 我发现一些只为 TURBO C 编写的代码 它们都不能使用 dev c 甚至 Visual c 编译和运行 我尝试运行在 Dev C 中找到的代码 但我
  • 我使用 difftime 的 c 函数有时会返回 65535

    我有一个函数 使用 difftime 来检测自通信心跳停止以来的时间 以秒为单位 该函数的运行速度可以达到每 50 毫秒一次 该函数似乎可以工作 除了偶尔返回 65535 之外 我可以将执行次数减少到每秒一次 因为 difftime 的返回
  • 着色器可以旋转形状以面向相机吗?

    我制作了一个球出现在 3D 空间中的场景 三角球耗费大量资源 所以我使用带有球纹理的二维表面 四边形 来完成此操作 但现在我需要在每次相机移动时调整形状的方向 我使用位置变换和 LookAt 方法来完成此操作 问题是我可以优化这个吗 如果可
  • 在 Outlook 中检索当前电子邮件正文

    在我的 Outlook 插件中 我想在功能区上添加一个按钮 因此当用户单击此按钮时 我想检索当前选定的电子邮件的正文 我有此代码 但它只检索收件箱中的第一封电子邮件 因为索引为 1 Microsoft Office Interop Outl
  • 在 Angular 6 和 ASP.net 中启用 CORS

    我正在尝试从 Angular 6 应用程序向发送电子邮件的 API 发送 POST 请求 我用邮递员测试了该请求并且它有效 但是当我在 Angular 应用程序中执行 POST 请求时 我的控制台中出现错误 我在 Angular 应用程序中

随机推荐

  • 如何排除某个字段被Elasticsearch 6.1搜索?

    我有一个包含多个字段的索引 我想根据除一个字段之外的所有字段中是否存在搜索字符串来进行过滤 用户评论 我正在做的查询搜索是 from offset size limit source document title query functio
  • 奇怪的wpf内存泄漏

    我遇到了一个奇怪的问题 即 wpf 中的 MenuItem 内存泄漏 我可以在 net 内存分析器中观察到此内存泄漏 我们的应用程序具有以下架构 一个主窗口 其中数据模板是一个 ApplicationPresenter Applicatio
  • 两个张量之间的克罗内克积

    我有两个张量 x 是 2 2 3 y 也是 2 2 3 定义张量的每个正面切片为x1 x2 x3 y1 y2 y3 xi 或 yi 是 2 2 矩阵 如何在matlab中计算x和y之间的克罗内克积 我想要得到的是 matlab 中的 kro
  • 我什么时候应该在 Asp.net MVC 中创建新的控制器类(设计问题)?

    在提问之前 先说一下我对MVC模式中Controller的理解 控制器是应用层 在DDD中 它控制应用程序流程 它保持薄 它控制工作单元 又名事务 我的问题是 我应该什么时候创建新的控制器类 我将举一个例子作为DinnerControlle
  • mongodb 在 python 中拒绝连接

    我在用windows8 为了编写我使用的代码IDLE 我尝试连接python to mongodb 但是当尝试获取集合名称时 会出现错误 ServerSelectionTimeoutError localhost 20101 Errno 1
  • Python 使用枚举内部列表理解

    假设我有一个这样的列表 mylist a b c d 为了将值与其索引一起打印 我可以使用 Pythonenumerate像这样的功能 gt gt gt for i j in enumerate mylist print i j 0 a 1
  • codeigniter 2 htaccess 路由差异

    28日发布的Codeigniter v2 0 我刚刚设置了全新安装并尝试从网址中删除index php 我使用相同的 apache 站点可用配置 htaccess 和 codeigniter 配置 当我排除index php时 Codeig
  • HTML 电子邮件 : td 左侧带有三角形

    而不是单独的td对于三角形 我想制作内容td with 左箭头三角形 就像图像中一样 table tr td width 2 align center valign middle style font family none font we
  • 如何使用 -ngraphic 和 -monitor 运行 qemu,但仍然能够向来宾发送 Ctrl+C 并使用 Ctrl+A X 退出?

    我刚刚发现如果你运行 QEMU monitor telnet 45454 server nowait nographic 然后 Ctrl C 终止 QEMU VM 而不是在来宾上生成 SIGINT 使用 ngraphic 运行 qemu 时
  • Scala 对 future 的“理解”

    我正在阅读 Scala Cookbook http shop oreilly com product 0636920026914 do 有一个与 Future 使用相关的示例 涉及理解 到目前为止 我对理解的理解是 当与集合一起使用时 它将
  • 在构造函数初始值设定项中复制初始化?

    为什么我的构造函数初始化程序不能使用复制初始化 struct S int a S int b a b direct initialization compiles struct T int a T int b a b copy initia
  • Django - 如何使用 LoginRequired 和 PermissionRequired 进行不同的重定向?

    我想创建一个 Mixin 它将 首先 检查用户是否经过身份验证 如果没有 则重定向到登录网址 如果是 第二 检查用户是否有定义的配置文件 用户 如果没有 则重定向到配置文件创建 否则 允许用户访问视图 我本来打算做类似的事情 class P
  • 如何打印计算机内存中的 long double 的二进制表示形式?

    我必须打印 a 的二进制表示long double由于某些原因的数量 我想查看计算机内存中保留的确切格式 我回答了以下问题union就是解决方案 为了float 替代数据类型是unsigned int因为两者都是 32 位的 为了doubl
  • 克隆存储库时出现 Gitlab/Gitolite 问题

    我严格按照Gitlab设置了来自 gitlab wiki 的手册 有用 我有网络访问权限 我也可以创建一个项目 并且在它之后创建了 git repo 一切都好 但是当我尝试克隆新创建的项目存储库时 git clone email prote
  • 忙碌指示器不显示

    我想展示一个BusyIndicator而一个漫长的过程正在进行中 问题是当我让它运行时它不会显示 并在该过程完成后显示 根据文档 繁忙指示器应用于指示正 在加载内容或 UI 被阻止等待资源可用时的活动 我创建了一个基于原始代码的最小代码 W
  • OAuth 同意屏幕为空白,并且加载图标在 Android 应用程序中永远旋转,

    我创建了一个 Android 应用程序 在其中访问谷歌日历 一周前它工作正常 但现在它没有显示 OAuth 同意屏幕 出现带有加载图标的白色弹出窗口 并且它不断旋转 看截图 OAuth 同意屏幕 我得到的错误是 com google api
  • 6.5.2.3 结构和联合成员中 C 中严格别名规则的例外

    引用自C99标准 6 5 2 3 5 为了简化联合的使用 做出了一项特殊保证 如果联合包含多个共享公共初始序列的结构 见下文 并且如果联合对象当前包含这些结构之一 允许在联合的完整类型声明可见的任何地方检查它们中任何一个的公共初始部分 如果
  • Git 分支没有按预期工作

    我正在阅读本教程 http gitref org branching 据我了解 本教程说如果我在Branch A并进行一些更改 不会影响其他分支 所以我正在测试这个 mkdir test cd test git init Initializ
  • 快速计算R中的二重积分

    我正在寻找比二重积分更快的解决方案 integrate function y sapply y function y integrate function x myfun x y llim ulim value llim ulim with
  • Boost::Asio :io_service.run() 与 poll() 或者如何在主循环中集成 boost::asio

    我目前第一次尝试使用 boost asio 进行一些简单的 tcp 网络 我已经遇到了一些我不太确定如何处理的事情 据我了解 io service run 方法基本上是一个循环 它运行直到没有什么可做的 这意味着它将运行直到我释放我的小服务