2
Ich benutze diesen Code async_read_some
mit TimeoutBoost Asio async_read_some Timeout
readdata=0;
port_->async_read_some(boost::asio::buffer(vector),
boost::bind(readCallback));
//init async timer
boost::asio::deadline_timer timer(io);
timer.async_wait(boost::bind(timeoutHandler));
timer.expires_from_now(boost::posix_time::seconds(5));
io.reset();
do {
io.run_one();
}
while (readdata==0);
hier sind meine Rückrufe
void readCallback()
{
std::cout << "READ CALLBACK: "<<x<<std::endl;
readdata=1;
return;
}
void timeoutHandler()
{
std::cout << "TIMEOUT CALLBACK: "<<x<<std::endl;
readdata=1;
}
mein Problem ist, dass timeoutHandler wird sofort ausgeführt wird und nicht nach 5 Sekunden
Es ist eine Weile her, seit ich Asio verwendet habe, aber was passiert, wenn Sie die 'io.reset()' entfernen? Es kann dazu führen, dass der 'async_wait' zurückgesetzt wird –
Wie @SteveVanOpstal sagte, sollten Sie das' io.reset() 'entfernen. Sie fügen dem asynchronen Ereignishandler (io_service) Aufgaben hinzu und setzen ihn dann unmittelbar vor dem Ausführen des Dienstes zurück, der die von Ihnen hinzugefügten Ereignisse ausführt (was Sie mit 'run_one()' tun). Ich empfehle, dass Sie mehr über 'io_service' lesen und lernen und wie es funktioniert. –
danke, ich habe das versucht, aber mit dem gleichen Ergebnis wird 'timeoutHandler()' sofort aufgerufen – user2071938