1
0
mirror of https://github.com/Zygo/bees.git synced 2025-05-17 13:25:45 +02:00
2016-11-17 12:12:13 -05:00

50 lines
933 B
C++

#ifndef CRUCIBLE_TIME_H
#define CRUCIBLE_TIME_H
#include "crucible/error.h"
#include <chrono>
#include <mutex>
#include <ostream>
namespace crucible {
double nanosleep(double secs);
class Timer {
chrono::high_resolution_clock::time_point m_start;
public:
Timer();
double age() const;
double report(int precision = 1000) const;
void reset();
void set(const chrono::high_resolution_clock::time_point &start);
void set(double delta);
double lap();
bool operator<(double d) const;
bool operator>(double d) const;
};
ostream &operator<<(ostream &os, const Timer &t);
class RateLimiter {
Timer m_timer;
double m_rate;
double m_burst;
double m_tokens;
mutex m_mutex;
void update_tokens();
public:
RateLimiter(double rate, double burst);
RateLimiter(double rate);
void sleep_for(double cost = 1.0);
bool is_ready();
void borrow(double cost = 1.0);
};
}
#endif // CRUCIBLE_TIME_H