boost asio deadline_timer async_wait (N Sekunden) zweimal innerhalb von N Sekunden bewirken, dass der Vorgang abgebrochen wird

Was ich will ist, wenn eine Nachrichtenwarteschlange ein int N empfängt, wird die Handlerfunktion nach N Sekunden aufgerufen. Unten ist mein Code.

Es wird in Ordnung ausgeführt, wenn die Dauer von zwei Sekunden in der Nähe der Nachrichtenwarteschlange größer als int N ist. Der Handler gibt jedoch in einem Handler "Vorgang abgebrochen" aus, wenn die Dauer von zwei Sekunden zwischen zwei empfangenen Nachrichtenwarteschlangen kleiner als N ist Ich möchte

Ich würde mich sehr über jede Hilfe freuen.

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

 }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage