RosettaCodeData/Task/Metronome/C++/metronome.cpp

42 lines
991 B
C++

#include <chrono>
#include <cstdint>
#include <iostream>
#include <thread>
class Metronome {
public:
Metronome(const int32_t& aBeats_per_minute, const int32_t& aMeasure, const int32_t& aDuration_in_minutes)
: beats_per_minute(aBeats_per_minute), measure(aMeasure), duration_in_minutes(aDuration_in_minutes) {
counter = 0;
}
void start() {
while ( counter < duration_in_minutes * beats_per_minute ) {
start_time = std::chrono::system_clock::now();
std::this_thread::sleep_until(time_to_awake());
counter++;
if ( counter % measure != 0 ) {
std::cout << "Tick " << std::flush;
} else {
std::cout << "Tock" << std::endl;
}
}
}
private:
std::chrono::system_clock::time_point time_to_awake() const {
return start_time + std::chrono::seconds(1);
}
std::chrono::system_clock::time_point start_time;
int32_t counter;
const int32_t beats_per_minute, measure, duration_in_minutes;
};
int main() {
Metronome metronome(60, 4, 1);
metronome.start();
}