6 Stimmen

Besseres boost asio deadline_timer Beispiel

Ich bin auf der Suche nach einem besseren Beispiel für die boost::asio::deadline_timer

Die angegebenen Beispiele führen immer zu einer Zeitüberschreitung und rufen die close Methode. Ich habe versucht, die Methode cancel() auf einen Timer, aber das führt dazu, dass die Funktion, die in async_wait sofort angerufen werden.

Was ist der richtige Weg mit Timern in einem asynchronen TCP-Client zu arbeiten?

1 Stimmen

Es gibt einen Grund für dieses Verhalten. Jeder Aufruf von async_wait ist mit einem Completion-Handler gepaart. Der Aufruf von cancel hat darauf keinen Einfluss.

21voto

Yukiko Punkte 1093

Sie erwähnen, dass der Aufruf von cancel() bei einem Zeitgeber dazu führt, dass die an async_wait übergebene Funktion sofort aufgerufen wird. Dies ist das erwartete Verhalten, aber denken Sie daran, dass Sie den an den Timer-Handler übergebenen Fehler überprüfen können, um festzustellen, ob der Timer abgebrochen wurde. Wenn der Timer abgebrochen wurde, wird operation_aborted übergeben. Zum Beispiel:

void handleTimer(const boost::system::error_code& error) {
    if (error == boost::asio::error::operation_aborted) {
        std::cout << "Timer was canceled" << std::endl;
    }
    else if (error) {
        std::cout << "Timer error: " << error.message() << std::endl;
    }
}

Hoffentlich hilft das. Wenn nicht, was ist das spezifische Beispiel, das Sie suchen?

0 Stimmen

Bricht io_service.stop() den Zeitgeber ab?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X