c++ - boost::asio::deadline_timer 在计时器处理程序中完成 async_read() 和 async_write() 后不会过期

标签 c++ boost boost-asio

我有一个 async_connected() 客户端,单线程,并且我的 deadline_timer 作为某个连接类的成员持久存在。我的 deadline_timer 只响一次,当我的 deadline_timer 到期时,我正在尝试做 3 件事:

  1. socket1 上的 async_write
  2. socket1 上的 async_read
  3. async_wait 在同一个计时器上,因为我希望这个计时器在 4 秒内再次响起。

发送和读取工作,问题是定时器永远不会再次过期。 io_service.run() 没有停止,因为它没有打印出来......为什么我的 deadline_timer 没有再次过期?

最佳答案

我弄清楚我做错了什么,不确定为什么会导致我看到的症状,但是当我在 deadline_timer 处理程序中使用 async_read() 读取时,完成后,我在每次读取后用 memset() 清除了我的 boost::asio::buffer 接收缓冲区。我知道我可能不需要这个内存清理。问题是我清除的内存比我给 async_read() 的接收缓冲区多,所以我正在设置无效位置。我不确定为什么这会导致 deadline_timer 不再触发,而且 async_read() 之后也不再工作。

关于c++ - boost::asio::deadline_timer 在计时器处理程序中完成 async_read() 和 async_write() 后不会过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8795548/

相关文章:

c++ - 容器如何处理 lambda 表达式的参数

c++ - 第一次使用 Boost::asio::async_read 读取时出现 EOF

c++ - 如何将 Python 编译成 C++ .exe

c++ - 不满意链接错误 : undefined symbol _ZN5boost6system16generic_categoryEv in java (JNI)

c++ - 是否有用于 Boost::asio 的 Web 框架?

c++ - 为什么这个 boost::spirit::qi 规则不能成功解析?

c++ - boost asio async_read_until : how to raise error from a custom MatchCondition?

c++ - asio::buffer 类型用于发送 std::vector 和 std::string

c++ - 如何解决用文字 0 和指针调用重载函数的歧义

c++ - 经期去除后的双倍空间