17#include "CoreComponent.h"
45 std::atomic_flag stateChangeRequest {};
52 isize suspendCounter = 0;
53 isize frameCounter = 0;
54 isize statsCounter = 0;
60 util::Clock nonstopClock;
61 util::Clock loadClock;
69 util::Clock wakeupClock;
81 const char *objectName()
const override {
return "Thread"; }
84 bool isLaunched()
const {
return thread.joinable(); }
92 void assertLaunched();
102 bool isEmulatorThread()
const {
return std::this_thread::get_id() == thread.get_id(); }
110 virtual void update() = 0;
113 virtual isize missingFrames()
const = 0;
116 virtual double refreshRate()
const = 0;
119 virtual void computeFrame() = 0;
162 bool isPoweredOn()
const {
return state !=
STATE_OFF; }
163 bool isPoweredOff()
const {
return state ==
STATE_OFF; }
168 bool isWarping()
const {
return warp != 0; }
169 bool isTracking()
const {
return track != 0; }
177 void warpOn(isize source = 0);
178 void warpOff(isize source = 0);
179 void trackOn(isize source = 0);
180 void trackOff(isize source = 0);
183 virtual void _powerOn() = 0;
184 virtual void _powerOff() = 0;
185 virtual void _pause() = 0;
186 virtual void _run() = 0;
187 virtual void _halt() = 0;
188 virtual void _warpOn() = 0;
189 virtual void _warpOff() = 0;
190 virtual void _trackOn() = 0;
191 virtual void _trackOff() = 0;
196 void changeStateTo(
ExecState requestedState);
199 virtual void isReady()
throws = 0;
214 void join() {
if (thread.joinable()) thread.join(); }
Suspend-resume mechanism.
Definition Suspendable.h:20
Implements the emulator's state model.
Definition Thread.h:35
void wakeUp()
Awakes the thread.
Definition Thread.cpp:401
void resume() override
Resumes the thread.
Definition Thread.cpp:427
void suspend() override
Suspends the thread.
Definition Thread.cpp:408
VirtualC64 project namespace.
Definition CmdQueue.cpp:16
EXEC_STATE
Execution state.
Definition ThreadTypes.h:22
@ STATE_UNINIT
Not yet initialized.
Definition ThreadTypes.h:23
@ STATE_OFF
Powered off.
Definition ThreadTypes.h:24
@ STATE_PAUSED
Powered on, but currently paused.
Definition ThreadTypes.h:25
@ STATE_HALTED
Shut down.
Definition ThreadTypes.h:28
@ STATE_SUSPENDED
Shortly paused for an internal state change.
Definition ThreadTypes.h:27
@ STATE_RUNNING
Up and running.
Definition ThreadTypes.h:26
util::Exception StateChangeException
Requests a state change from within the emulator.
Definition Thread.h:28
Base class for all emulator exceptions.
Definition Exception.h:22