2014-10-22 14 views
11

Per far scadere un timer in 5 secondi,
c'è qualche differenza pratica tra questi due?
È preferibile uno qualsiasi (prestazioni, risorse, ecc.) All'altro in questo caso?
Differenza tra `deadline_timer`e` waitable_timer` in `boost asio`

[Opzione 1] deadline_timer:

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

[Opzione 2] waitable_timer (system_timer o steady_timer):

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

PS: Si prega di concentrarsi sul confronto tra deadline_timer vs. system_timer, anziché system_timer vs. steady_timer.

risposta

10

L'unica differenza è tra i tipi di orologio utilizzati.

A partire da Boost 1.56, sia basic_deadline_timer sia basic_waitable_timer utilizzano detail::deadline_timer_service all'interno.

Non c'è differenza nel modo in cui esegue l'attesa, l'unica differenza è nel modo in cui esegue il calcolo del tempo.

Nel suo metodo wait() utilizza Time_Traits::now() per verificare se è necessario attendere di più. Per system_timer è std::chrono::system_clock::now() e per deadline_timer è boost::posix_time::microsec_clock::universal_time() o boost::posix_time::second_clock::universal_time() a seconda della presenza di orologio ad alta precisione (vedere time_traits.hpp).

std::chrono::system_clock l'implementazione è fornita da un compilatore/venditore di librerie standard, mentre boost::posix_time::*clock è implementato da Boost utilizzando le funzioni di sistema disponibili.

Queste implementazioni possono ovviamente avere prestazioni e/o precisione diverse a seconda della piattaforma e del compilatore.

1

C'è eccellente responce al problema simile qui: https://stackoverflow.com/a/16364002/3491378

In sostanza, la differenza principale è che se ci si aspetta tutti i cambiamenti esterni al clock di sistema, si dovrebbe piuttosto usare steady_timer - deadline_timer ritardo sarà influenzato da coloro modifiche

+0

Per chiarire la risposta, vuoi dire che non ci sarebbe alcuna differenza pratica nel caso in cui l'orologio di sistema non venga modificato? – ALittleDiff

+0

Se ti capisco bene, sì. Se l'orologio di sistema non viene modificato durante il ritardo impostato (5 secondi nell'esempio), la differenza pratica sarebbe trascurabile (come ha detto Anton - l'unica differenza sarà nelle loro implementazioni) – pmpod

Problemi correlati