Changeset 15603 for branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/Algorithms/BasicAlgorithm.cs
- Timestamp:
- 01/12/18 13:33:23 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/Algorithms/BasicAlgorithm.cs
r15367 r15603 21 21 22 22 using System; 23 using System.Linq;24 23 using System.Threading; 25 24 using HeuristicLab.Common; … … 32 31 33 32 private bool pausePending; 34 private DateTime lastUpdateTime;33 private bool executionTimeActive; 35 34 36 35 public string Filename { get; set; } … … 52 51 } 53 52 53 [Storable] 54 private TimeSpan executionTime; 55 private DateTime startDate; 56 public override TimeSpan ExecutionTime { 57 get { return executionTime + (executionTimeActive ? DateTime.UtcNow - startDate : TimeSpan.Zero); } 58 } 59 54 60 [StorableConstructor] 55 61 protected BasicAlgorithm(bool deserializing) : base(deserializing) { } … … 58 64 results = cloner.Clone(original.Results); 59 65 initialized = original.initialized; 66 executionTime = original.executionTime; 60 67 } 61 68 protected BasicAlgorithm() 62 69 : base() { 63 70 results = new ResultCollection(); 71 executionTime = TimeSpan.Zero; 64 72 } 65 73 66 74 public override void Prepare() { 75 executionTime = TimeSpan.Zero; 67 76 if (Problem == null) return; 68 77 base.Prepare(); … … 73 82 74 83 public override void Start(CancellationToken cancellationToken) { 84 startDate = DateTime.UtcNow; 85 executionTimeActive = true; 75 86 base.Start(cancellationToken); 76 87 CancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); … … 117 128 private void Run(object state) { 118 129 CancellationToken cancellationToken = (CancellationToken)state; 119 lastUpdateTime = DateTime.UtcNow; 120 System.Timers.Timer timer = new System.Timers.Timer(250); 121 timer.AutoReset = true; 122 timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 123 timer.Start(); 124 try { 125 if (!initialized) 126 Initialize(cancellationToken); 127 initialized = true; 128 Run(cancellationToken); 129 } 130 finally { 131 timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed); 132 timer.Stop(); 133 ExecutionTime += DateTime.UtcNow - lastUpdateTime; 134 } 130 if (!initialized) 131 Initialize(cancellationToken); 132 initialized = true; 133 Run(cancellationToken); 135 134 } 136 135 … … 138 137 protected abstract void Run(CancellationToken cancellationToken); 139 138 140 #region Events 141 private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { 142 System.Timers.Timer timer = (System.Timers.Timer)sender; 143 timer.Enabled = false; 144 DateTime now = DateTime.UtcNow; 145 ExecutionTime += now - lastUpdateTime; 146 lastUpdateTime = now; 147 timer.Enabled = true; 139 protected override void OnPaused() { 140 executionTime += DateTime.UtcNow - startDate; 141 executionTimeActive = false; 142 base.OnPaused(); 148 143 } 149 #endregion150 144 145 protected override void OnStopped() { 146 if (executionTimeActive) { // don't do if going from pause to stop 147 executionTime += DateTime.UtcNow - startDate; 148 executionTimeActive = false; 149 } 150 base.OnStopped(); 151 } 151 152 } 152 153 }
Note: See TracChangeset
for help on using the changeset viewer.