我有一个 async_connected() 客户端,单线程,并且我的 deadline_timer
作为某个连接类的成员持久存在。我的 deadline_timer
只响一次,当我的 deadline_timer 到期时,我正在尝试做 3 件事:
- socket1 上的 async_write
- socket1 上的 async_read
- 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/