diff --git a/src/emucore/EmulationWorker.cxx b/src/emucore/EmulationWorker.cxx index 26c23e15d..9304e11b4 100644 --- a/src/emucore/EmulationWorker.cxx +++ b/src/emucore/EmulationWorker.cxx @@ -175,6 +175,7 @@ void EmulationWorker::handleWakeupFromWaitingForResume(std::unique_lock& lock) { myState = State::running; - time_point now = high_resolution_clock::now(); uInt64 totalCycles = 0; do { @@ -232,13 +232,13 @@ void EmulationWorker::dispatchEmulation(std::unique_lock& lock) if (myDispatchResult->getStatus() == DispatchResult::Status::ok) { // If emulation finished successfully, we can go for another round duration timesliceSeconds(static_cast(totalCycles) / static_cast(myCyclesPerSecond)); - myWakeupPoint = now + duration_cast(timesliceSeconds); + myVirtualTime += duration_cast(timesliceSeconds); myState = State::waitingForStop; - if (myWakeupPoint > high_resolution_clock::now()) + if (myVirtualTime > high_resolution_clock::now()) // If we can keep up with the emulation, we sleep - mySignalCondition.wait_until(lock, myWakeupPoint); + mySignalCondition.wait_until(lock, myVirtualTime); else { // If we are already lagging behind, we briefly relinquish control over the mutex // and yield to scheduler, to make sure that the main thread has a chance to stop us diff --git a/src/emucore/EmulationWorker.hxx b/src/emucore/EmulationWorker.hxx index d436c892a..e2226d6e9 100644 --- a/src/emucore/EmulationWorker.hxx +++ b/src/emucore/EmulationWorker.hxx @@ -84,7 +84,7 @@ class EmulationWorker uInt32 myMinCycles; DispatchResult* myDispatchResult; - std::chrono::time_point myWakeupPoint; + std::chrono::time_point myVirtualTime; }; #endif // EMULATION_WORKER_HXX