boost :: asio :: deadline_timer не истекает после того, как async_read () и async_write () сделаны в обработчике таймера - PullRequest
0 голосов
/ 10 января 2012

У меня есть клиент async_connected (), однопоточный, и мой deadline_timer сохраняется как член некоторого класса соединения. Мой deadline_timer срабатывает только один раз, и я пытаюсь сделать 3 вещи, когда истекает мой deadline_timer:

  1. async_write на socket1
  2. async_read on socket1
  3. async_wait на этом же таймере, поскольку я хочу, чтобы этот таймер снова сработал через 4 секунды.

Отправка и чтение работают, проблема в том, что таймер никогда не истекает снова. io_service.run() не остановился, так как строка сразу после того, как она не напечатана ... Почему мой deadline_timer снова не истекает?

1 Ответ

2 голосов
/ 11 января 2012

Я понял, что я делаю неправильно, не уверен, почему это привело к появлению симптомов, которые я видел, но когда я прочитал с помощью async_read() в обработчике deadline_timer, после того, как я это сделал, я очистил свой boost::asio::bufferполучить буфер с memset() после каждого чтения.Я знаю, что мне, вероятно, не нужна эта очистка памяти.Проблема заключалась в том, что я очищал больше памяти, чем я дал async_read() с помощью буфера приема, поэтому я устанавливал неправильные расположения.Я не уверен, почему это привело к тому, что deadline_timer никогда больше не стрелял, а также async_read() после этого тоже не сработало.

...