2012-01-09 74 views
0

我有一个async_connected()客户端,单线程,并且我的deadline_timer被作为某个连接类的成员持久化。我只deadline_timer熄灭一次,我试图做3件事时,我的deadline_timer到期:boost :: asio :: deadline_timer在async_read()和async_write()在定时器处理程序中完成后不会终止

  1. ASYNC_WRITE上SOCKET1
  2. async_read上SOCKET1
  3. 在这个相同的定时器async_wait因为我想这个计时器去在4秒内再次关闭。

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

+1

请张贴您的代码,而不是描述您的代码的文字。 – 2012-01-10 15:31:16

+0

您将需要更改计时器的到期时间,并再次从处理程序中调用'async_wait()'。 – Chad 2012-01-10 19:51:54

+0

如果你从增强网站学习,那么你会放弃太阳。 – codekiddy 2012-01-11 19:44:05

回答

2

我想通了,我在做什么错了,不知道为什么它导致我看到的症状,但是当我在deadline_timer处理与async_read()读,我做了后,我清空了我的boost::asio::buffer收到后memset()缓冲每读一遍。我知道我可能不需要这种内存清理。问题在于我清除的内存比接收缓冲区的async_read()多,因此我对memcached的无效位置进行了memset。我不知道为什么导致deadline_timer从不再次发射,并且async_read()也没有再次工作。

相关问题