tracktion-engine 3.0-10-g034fdde4aa5
Tracktion Engine — High level data model for audio applications

« « « Anklang Documentation
Loading...
Searching...
No Matches
tracktion_SharedTimer.h
Go to the documentation of this file.
1 /*
2,--. ,--. ,--. ,--.
3 ,-' '-.,--.--.,--,--.,---.| |,-.,-' '-.`--' ,---. ,--,--, Copyright 2018
4 '-. .-'| .--' ,-. | .--'| /'-. .-',--.| .-. || \ Tracktion Software
5 | | | | \ '-' \ `--.| \ \ | | | |' '-' '| || | Corporation
6 `---' `--' `--`--'`---'`--'`--' `---' `--' `---' `--''--' www.tracktion.com
7
8 Tracktion Engine uses a GPL/commercial licence - see LICENCE.md for details.
9*/
10
11#pragma once
12
13namespace tracktion { inline namespace engine
14{
15
16struct HertzTag { explicit HertzTag() = default; };
17inline constexpr HertzTag HertzTag_t{};
18
19//==============================================================================
20//==============================================================================
22{
23public:
24 //==============================================================================
25 template<typename Type>
27 : frequencyHz (static_cast<int> (1.0 / std::chrono::duration<double> (interval).count()))
28 {
29 }
30
31 SharedTimer (HertzTag, int frequencyInHz)
32 : frequencyHz (frequencyInHz)
33 {
34 }
35
36 static SharedTimer fromFrequency (int frequencyInHz)
37 {
38 return SharedTimer (std::chrono::duration<double> (1.0 / frequencyInHz));
39 }
40
41 //==============================================================================
42 struct Listener
43 {
44 virtual ~Listener() = default;
45 virtual void sharedTimerCallback() = 0;
46 };
47
48 void addListener (Listener* l)
49 {
50 TRACKTION_ASSERT_MESSAGE_THREAD
51 listeners.add (l);
52
53 if (! isTimerRunning())
54 startTimerHz (frequencyHz);
55 }
56
57 void removeListener (Listener* l)
58 {
59 TRACKTION_ASSERT_MESSAGE_THREAD
60 listeners.remove (l);
61
62 if (listeners.isEmpty())
63 stopTimer();
64 }
65
66private:
67 //==============================================================================
68 int frequencyHz;
70
71 //==============================================================================
72 void timerCallback() override
73 {
74 listeners.call (&Listener::sharedTimerCallback);
75 }
76
78};
79
80}} // namespace tracktion { inline namespace engine
void call(Callback &&callback)
void stopTimer() noexcept
void startTimerHz(int timerFrequencyHz) noexcept
bool isTimerRunning() const noexcept
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)