wie überprüft man, ob boost :: deadline_timer aktiv ist

8

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?

    
Andriy Tylychko 04.01.2011, 13:03
quelle

4 Antworten

7

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?

    
Nim 04.01.2011, 13:46
quelle
2

Drei Optionen kommen mir in den Sinn:

  1. 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.

  2. 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.

  3. Ändern Sie Ihre Anforderungen / Ihr Design, so dass Sie dies nicht wissen müssen.

villintehaspam 04.01.2011 13:29
quelle
2

Wie wäre es damit?

%Vor%     
Jarrod Chesney 17.11.2011 09:59
quelle
0

Ich weiß, dass das an dieser Stelle ein wenig alt ist, aber ich habe noch einen anderen möglichen Vorschlag: Wie wäre es mit der Implementierung und danach, ob es möglicherweise ausstehende Wartezeiten gibt? Es würde so aussehen:

%Vor%     
cirrusio 04.04.2017 18:27
quelle

Tags und Links