Ich benutze (single-threaded) a boost::asio:io_service
, um eine Menge von TCP-Verbindungen zu behandeln. Für jede Verbindung verwende ich einen deadline_timer, um Timeouts zu erfassen. Wenn eine der Verbindungen das Zeitlimit überschreitet, kann ich keines der Ergebnisse der anderen Verbindungen verwenden. Daher möchte ich meinen io_service komplett neu starten. Ich dachte, dass das Aufrufen von io_service.stop()
es ermöglichen würde, dass "beendete" Handler in der Warteschlange aufgerufen werden und Handler in der Warteschlange mit einem Fehler aufrufen würden.Klare boost :: asio :: io_service nach stop()
Es sieht jedoch so aus, als ob die Handler in der Warteschlange bleiben und daher ruft io_service.reset()
und später io_service.run()
die alten Handler wieder auf. Kann jemand bestätigen, dass die Handler tatsächlich in der Warteschlange bleiben, selbst nachdem io_service.stop()
aufgerufen wird. Und wenn ja, welche Möglichkeiten gibt es, den io_service, z. Entfernen Sie alle Warteschlangenhandler?