在async_read()和async_write()在计时器处理程序中完成后,boost :: asio :: deadline_timer未到期

时间:2012-01-09 21:38:56

标签: c++ boost boost-asio

我有一个async_connected()客户端,单线程,我的deadline_timer作为某个连接类的成员持久化。我的deadline_timer只发了一次,当我的deadline_timer到期时我正试图做三件事:

    socket上的
  1. async_write
  2. socket1上的
  3. async_read
  4. async_wait在同一个计时器上我希望这个计时器在4秒内再次关闭。
  5. 发送和读取工作,问题是计时器永远不会再过期。 io_service.run()并没有因为没有打印而没有停止...为什么我的deadline_timer没有再次到期?

1 个答案:

答案 0 :(得分:2)

我弄清楚我做错了什么,不知道为什么它会导致我看到的症状,但当我在async_read()处理程序中使用deadline_timer阅读时,在我完成后我清除了每次阅读后我的boost::asio::buffer接收缓冲区都带有memset()。我知道我可能不需要这种内存清理。问题是我清理了比使用接收缓冲区async_read()更多的内存,因此我设置了无效的位置。我不确定为什么导致deadline_timer永远不会再次发射,async_read()之后也没有再次发挥作用。