mirror of
https://github.com/Zygo/bees.git
synced 2025-05-17 13:25:45 +02:00
50 lines
933 B
C++
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
|