From 645c1bf87cf0a9f3b18c38f776968e20f295a404 Mon Sep 17 00:00:00 2001 From: Andreas Beham Date: Mon, 4 May 2020 15:57:05 +0200 Subject: [PATCH] Fix returning Now in scaled realtime mode and also fix cancellation (#33) --- src/SimSharp/Core/Environment.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/SimSharp/Core/Environment.cs b/src/SimSharp/Core/Environment.cs index 70ed10d..6b16d90 100644 --- a/src/SimSharp/Core/Environment.cs +++ b/src/SimSharp/Core/Environment.cs @@ -969,7 +969,12 @@ public class PseudoRealtimeSimulation : ThreadSafeSimulation { /// The current model time. Note that, while in realtime, this may continuously change. /// public override DateTime Now { - get { lock (_timeLocker) { return base.Now + _rtDelayTime.Elapsed; } } + get { + lock (_timeLocker) { + if (!IsRunningInRealtime) return base.Now; + return base.Now + TimeSpan.FromMilliseconds(_rtDelayTime.Elapsed.TotalMilliseconds * RealtimeScale.Value); + } + } protected set => base.Now = value; } @@ -1009,7 +1014,7 @@ public override void Step() { var observed = _rtDelayTime.Elapsed; lock (_locker) { - if (rtScale.Value != 1.0) observed = TimeSpan.FromMilliseconds(observed.TotalMilliseconds / rtScale.Value); + if (rtScale.Value != 1.0) observed = TimeSpan.FromMilliseconds(observed.TotalMilliseconds * rtScale.Value); if (_rtDelayCtrl.IsCancellationRequested && observed < delay) { lock (_timeLocker) { Now = base.Now + observed;