openMSX
RealTime.hh
Go to the documentation of this file.
1#ifndef MSXREALTIME_HH
2#define MSXREALTIME_HH
3
4#include "Schedulable.hh"
5#include "EventListener.hh"
6#include "Observer.hh"
7#include "EmuTime.hh"
8#include <cstdint>
9
10namespace openmsx {
11
12class MSXMotherBoard;
13class GlobalSettings;
14class EventDistributor;
15class EventDelay;
16class BooleanSetting;
17class SpeedManager;
18class ThrottleManager;
19class Setting;
20
21class RealTime final : private Schedulable, private EventListener
22 , private Observer<Setting>
23 , private Observer<SpeedManager>
24 , private Observer<ThrottleManager>
25{
26public:
27 explicit RealTime(
28 MSXMotherBoard& motherBoard, GlobalSettings& globalSettings,
29 EventDelay& eventDelay);
30 ~RealTime();
31
34 double getRealDuration(EmuTime::param time1, EmuTime::param time2);
35
38 EmuDuration getEmuDuration(double realDur);
39
45 bool timeLeft(uint64_t us, EmuTime::param time);
46
47 void resync();
48
49 void enable();
50 void disable();
51
52private:
58 void sync(EmuTime::param time, bool allowSleep);
59
60 // Schedulable
61 void executeUntil(EmuTime::param time) override;
62
63 // EventListener
64 int signalEvent(const Event& event) override;
65
66 // Observer<Setting>
67 void update(const Setting& setting) noexcept override;
68 // Observer<SpeedManager>
69 void update(const SpeedManager& speedManager) noexcept override;
70 // Observer<ThrottleManager>
71 void update(const ThrottleManager& throttleManager) noexcept override;
72
73 void internalSync(EmuTime::param time, bool allowSleep);
74
75 MSXMotherBoard& motherBoard;
76 EventDistributor& eventDistributor;
77 EventDelay& eventDelay;
78 SpeedManager& speedManager;
79 ThrottleManager& throttleManager;
80 BooleanSetting& pauseSetting;
81 BooleanSetting& powerSetting;
82
83 uint64_t idealRealTime;
84 EmuTime emuTime = EmuTime::zero();
85 double sleepAdjust;
86 bool enabled = true;
87};
88
89} // namespace openmsx
90
91#endif
BaseSetting * setting
Definition: Interpreter.cc:28
This class is responsible for translating host events into MSX events.
Definition: EventDelay.hh:27
This class contains settings that are used by several other class (including some singletons).
Generic Gang-of-Four Observer class, templatized edition.
Definition: Observer.hh:10
double getRealDuration(EmuTime::param time1, EmuTime::param time2)
Convert EmuTime to RealTime.
Definition: RealTime.cc:54
bool timeLeft(uint64_t us, EmuTime::param time)
Check that there is enough real time left before we reach as certain point in emulated time.
Definition: RealTime.cc:64
RealTime(MSXMotherBoard &motherBoard, GlobalSettings &globalSettings, EventDelay &eventDelay)
Definition: RealTime.cc:20
EmuDuration getEmuDuration(double realDur)
Convert RealTime to EmuTime.
Definition: RealTime.cc:59
Every class that wants to get scheduled at some point must inherit from this class.
Definition: Schedulable.hh:34
Manages the desired ratio between EmuTime and real time.
Definition: SpeedManager.hh:18
Manages the throttle state of openMSX.
This file implemented 3 utility functions:
Definition: Autofire.cc:9
std::variant< KeyUpEvent, KeyDownEvent, MouseMotionEvent, MouseButtonUpEvent, MouseButtonDownEvent, MouseWheelEvent, JoystickAxisMotionEvent, JoystickHatEvent, JoystickButtonUpEvent, JoystickButtonDownEvent, OsdControlReleaseEvent, OsdControlPressEvent, WindowEvent, TextEvent, FileDropEvent, QuitEvent, FinishFrameEvent, CliCommandEvent, GroupEvent, BootEvent, FrameDrawnEvent, BreakEvent, SwitchRendererEvent, TakeReverseSnapshotEvent, AfterTimedEvent, MachineLoadedEvent, MachineActivatedEvent, MachineDeactivatedEvent, MidiInReaderEvent, MidiInWindowsEvent, MidiInCoreMidiEvent, MidiInCoreMidiVirtualEvent, MidiInALSAEvent, Rs232TesterEvent, ImGuiDelayedActionEvent, ImGuiActiveEvent > Event
Definition: Event.hh:450