File: periodic_closure.cc

package info (click to toggle)
golang-github-google-certificate-transparency 0.0~git20160709.0.0f6e3d1~ds1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster
  • size: 5,676 kB
  • sloc: cpp: 35,278; python: 11,838; java: 1,911; sh: 1,885; makefile: 950; xml: 520; ansic: 225
file content (41 lines) | stat: -rw-r--r-- 1,014 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "util/periodic_closure.h"

#include <glog/logging.h>
#include <functional>

using std::bind;
using std::chrono::duration_cast;
using std::function;
using std::shared_ptr;

namespace cert_trans {


PeriodicClosure::PeriodicClosure(const shared_ptr<libevent::Base>& base,
                                 const std::chrono::duration<double>& period,
                                 const function<void()>& closure)
    : base_(base),
      period_(duration_cast<clock::duration>(period)),
      closure_(closure),
      event_(*base_, -1, 0, bind(&PeriodicClosure::Run, this)),
      target_run_time_(clock::now() + period_) {
  LOG_IF(WARNING, !clock::is_steady)
      << "clock used for PeriodicClosure is not steady";

  event_.Add(target_run_time_ - clock::now());
}


void PeriodicClosure::Run() {
  closure_();

  const clock::time_point now(clock::now());
  while (target_run_time_ <= now) {
    target_run_time_ += period_;
  }

  event_.Add(target_run_time_ - now);
}


}  // namespace cert_trans