Irgendeine Möglichkeit zu überprüfen, ob deadline_timer aktiv ist? z.B. Wenn es sich im Status async_wait befindet und nicht abgebrochen wurde?
Der Handler für das Timeout wird mit einer Fehlerbedingung aufgerufen, wenn der Timer abgebrochen wurde (sowie ein normales Timeout). Könnten Sie nicht einfach einen bool setzen, bevor Sie async_wait
aufrufen und dann im Handler zurücksetzen, wenn die Fehlerbedingung gesetzt ist?
Drei Optionen kommen mir in den Sinn:
Erstellen Sie Ihre eigene Timer-Klasse (natürlich unter Verwendung des deadline_timer), die ihr eigenes Mitglied do_async_wait hat. In diesem Member legen Sie eine Membervariable fest, die dann von einem bool isWaiting () Member oder ähnlichem zurückgegeben werden kann, bevor Sie async_wait für den internen Deadlinetimer aufrufen. Beachten Sie, dass das Mitglied async_wait nicht virtuell ist. Sie können also nicht nur von deadline_timer und override erben. Beachten Sie, dass Sie das Flag auch zurücksetzen müssen, wenn Ihr Handler aufgerufen wird (indem Sie Ihren eigenen Timer zum Handler machen, der dann an einen anderen Handler weiterleitet) oder wenn cancel aufgerufen wird.
Bearbeiten Sie den Boost-Code, um das zu tun, was Sie wollen. Soweit ich weiß, ist dies vollkommen legal, aber das ist natürlich keine sehr gute Option.
Ändern Sie Ihre Anforderungen / Ihr Design, so dass Sie dies nicht wissen müssen.
Tags und Links c++ boost boost-asio