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