19 using System.Threading;
35 private Thread _realTimeThread;
36 private CancellationTokenSource _cancellationTokenSource =
new();
59 public override bool IsActive {
get;
protected set; }
66 base.Setup(algorithm, job, resultHandler, api, isolatorLimitProvider);
74 Add(
new ScheduledEvent(
"RefreshMarketHoursAndSymbolProperties", times, (name, triggerTime) =>
98 while (!_cancellationTokenSource.IsCancellationRequested)
103 var nextSecond = time.RoundUp(TimeSpan.FromSeconds(1));
104 var delay = Convert.ToInt32((nextSecond - time).TotalMilliseconds);
105 Thread.Sleep(delay < 0 ? 1 : delay);
110 var scheduledEvent = kvp.Key;
115 catch (Exception exception)
117 Algorithm.SetRuntimeError(exception, $
"Scheduled event: '{scheduledEvent.Name}' at {time}");
123 Log.
Trace(
"LiveTradingRealTimeHandler.Run(): Exiting thread... Exit triggered: " + _cancellationTokenSource.IsCancellationRequested);
136 else if (_realTimeThread ==
null)
140 _realTimeThread =
new Thread(Run) { IsBackground =
true, Name =
"RealTime Thread" };
141 _realTimeThread.Start();
153 base.ScanPastEvents(time);
164 _realTimeThread.StopSafely(TimeSpan.FromMinutes(1), _cancellationTokenSource);
165 _cancellationTokenSource.DisposeSafely();
177 Log.
Trace(
"LiveTradingRealTimeHandler.ResetMarketHoursDatabase(): Updated market hours database.");
186 Log.
Trace(
"LiveTradingRealTimeHandler.ResetSymbolPropertiesDatabase(): Updated symbol properties database.");