| 36 | static const int64_t NsPerSec = 1000000000; |
| 37 | |
| 38 | void init(int64_t init_calibrate_ns = 20000000, int64_t calibrate_interval_ns = 3 * NsPerSec) |
| 39 | { |
| 40 | calibate_interval_ns_ = calibrate_interval_ns; |
| 41 | int64_t base_tsc, base_ns; |
| 42 | syncTime(base_tsc, base_ns); |
| 43 | int64_t expire_ns = base_ns + init_calibrate_ns; |
| 44 | while (rdsysns() < expire_ns) |
| 45 | std::this_thread::yield(); |
| 46 | int64_t delayed_tsc, delayed_ns; |
| 47 | syncTime(delayed_tsc, delayed_ns); |
| 48 | double init_ns_per_tsc = (double)(delayed_ns - base_ns) / (delayed_tsc - base_tsc); |
| 49 | saveParam(base_tsc, base_ns, base_ns, init_ns_per_tsc); |
| 50 | } |
| 51 | |
| 52 | void calibrate() |
| 53 | { |