2014-10-22 20 views
11

Um einen Timer in 5 Sekunden zu verfallen,
gibt es einen praktischen Unterschied zwischen diesen beiden?
Ist für diesen Fall jemand (Leistung, Ressource, etc.) zu den anderen vorzuziehen?
Unterschied zwischen `deadline_timer`und` waitable_timer` in `boost asio`

[Option 1] deadline_timer:

boost::asio::deadline_timer timer(io_service); 
timer.expires_from_now(boost::posix_time::seconds(5)); 

[Option 2] waitable_timer (system_timer oder steady_timer):

boost::asio::system_timer timer(io_service); 
timer.expires_from_now(std::chrono::seconds(5)); 

PS: konzentrieren bitte auf den Vergleich deadline_timer vs. system_timer, anstatt system_timer gegen steady_timer.

Antwort

10

Der einzige Unterschied besteht zwischen den verwendeten Uhrentypen.

Ab Boost 1.56 verwenden detail::deadline_timer_service sowohl basic_deadline_timer als auch basic_waitable_timer.

Es gibt keinen Unterschied in der Art, wie es wartet, der einzige Unterschied besteht darin, wie es die Zeitberechnung durchführt.

In seiner wait() Methode verwendet es Time_Traits::now(), um zu prüfen, ob es mehr warten muss. Für system_timer ist es std::chrono::system_clock::now(), und für deadline_timer ist es boost::posix_time::microsec_clock::universal_time() oder boost::posix_time::second_clock::universal_time() abhängig von der Anwesenheit von hoher Präzision Uhr (siehe time_traits.hpp).

std::chrono::system_clock Implementierung wird von einem Compiler/Standard-Bibliothek-Anbieter zur Verfügung gestellt, während boost::posix_time::*clock von Boost mit verfügbaren Systemfunktionen implementiert wird.

Diese Implementierungen können natürlich abhängig von der Plattform und dem Compiler unterschiedliche Leistung und/oder Präzision haben.

1

Es gibt ausgezeichnete Antwort-ähnlichen Problem hier: https://stackoverflow.com/a/16364002/3491378

Grundsätzlich ist der wesentliche Unterschied, dass, wenn Sie irgendwelche externen Änderungen an der Systemuhr erwarten Sie eher steady_timer verwenden sollten - deadline_timer Verzögerung wird von den Betroffenen werden Änderungen

+0

Um Ihre Antwort zu verdeutlichen, meinen Sie, es gäbe keinen praktischen Unterschied in dem Fall, dass die Systemuhr nicht verändert wird? – ALittleDiff

+0

Wenn ich dich richtig verstehe - ja. Wenn die Systemuhr während der von Ihnen eingestellten Verzögerung nicht geändert wird (im Beispiel 5 Sekunden), wäre der praktische Unterschied vernachlässigbar (wie Anton sagte - der einzige Unterschied liegt in ihren Implementierungen) – pmpod

Verwandte Themen