Skip to content

Commit 645c1bf

Browse files
authored
Fix returning Now in scaled realtime mode and also fix cancellation (#33)
1 parent 828d314 commit 645c1bf

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/SimSharp/Core/Environment.cs

+7-2
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,12 @@ public class PseudoRealtimeSimulation : ThreadSafeSimulation {
969969
/// The current model time. Note that, while in realtime, this may continuously change.
970970
/// </summary>
971971
public override DateTime Now {
972-
get { lock (_timeLocker) { return base.Now + _rtDelayTime.Elapsed; } }
972+
get {
973+
lock (_timeLocker) {
974+
if (!IsRunningInRealtime) return base.Now;
975+
return base.Now + TimeSpan.FromMilliseconds(_rtDelayTime.Elapsed.TotalMilliseconds * RealtimeScale.Value);
976+
}
977+
}
973978
protected set => base.Now = value;
974979
}
975980

@@ -1009,7 +1014,7 @@ public override void Step() {
10091014
var observed = _rtDelayTime.Elapsed;
10101015

10111016
lock (_locker) {
1012-
if (rtScale.Value != 1.0) observed = TimeSpan.FromMilliseconds(observed.TotalMilliseconds / rtScale.Value);
1017+
if (rtScale.Value != 1.0) observed = TimeSpan.FromMilliseconds(observed.TotalMilliseconds * rtScale.Value);
10131018
if (_rtDelayCtrl.IsCancellationRequested && observed < delay) {
10141019
lock (_timeLocker) {
10151020
Now = base.Now + observed;

0 commit comments

Comments
 (0)