boost asio deadline_timer async_wait (N segundos) duas vezes dentro de N segundos causa a operação cancelada

O que eu quero é que quando uma fila de mensagens receber um int N, a função de manipulador será chamada após N segundos. abaixo está o meu código.

Ele funciona OK se os segundos de duração de duas filas de mensagens próximas forem maiores que o N int, mas o manipulador imprimirá "Operação cancelada" em um manipulador quando os segundos de duração entre duas filas de mensagens recebidas forem menores que N, o que não é o que eu quer.

Eu apreciaria muito por qualquer ajuda.

#include <boost/asio.hpp>
#include <zmq.h>
#include <boost/thread.hpp>
#include <iostream>

boost::asio::io_service io_service;

void* context = zmq_ctx_new();
void* sock_pull = zmq_socket(context, ZMQ_PULL);


void handler(const boost::system::error_code &ec) {
    std::cout << "hello, world" << "\t" << ec.message() << std::endl;
}

void run() {
    io_service.run();
}

void thread_listener() {

     int nRecv;
     boost::asio::deadline_timer timer(io_service, boost::posix_time::seconds(0));
     while( true ) {
         zmq_recv(sock_pull, &nRecv, sizeof(nRecv), 0);
         std::cout << nRecv << std::endl;
         timer.expires_from_now(boost::posix_time::seconds(nRecv));
         timer.async_wait(handler);
     }

 }

 int main(int argc, char* argv[]) {

     boost::asio::io_service::work work(io_service);

     zmq_bind(sock_pull, "tcp://*:60000");
     boost::thread tThread(thread_listener);
     boost::thread tThreadRun(run);
     tThread.join();
     tThreadRun.join();
     return 0;

 }

questionAnswers(1)

yourAnswerToTheQuestion