увеличить asio deadline_timer async_wait (N секунд) дважды в течение N секунд, потому что операция отменена

То, что я хочу, это когда одна очередь сообщений получает int N, функция обработчика будет вызываться через N секунд. ниже мой код.

Он работает нормально, если длительность секунд двух ближайших очередей сообщений больше, чем int N, но обработчик напечатает «Операция отменена» в одном обработчике, когда длительность секунд между двумя полученными очередями сообщений меньше N, что не хочу.

Я очень признателен за любую помощь.

#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;

 }