Ignore:
Timestamp:
10/16/15 13:31:14 (3 years ago)
Author:
jkarder
Message:

#2298: added execution time to CSharpScript

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Scripting/3.3/Scripts/CSharp/CSharpScript.cs

    r12504 r13024  
    4040    #region Fields & Properties
    4141    private CSharpScriptBase compiledScript;
     42    private Thread scriptThread;
     43    private DateTime lastUpdateTime;
    4244
    4345    public string Filename { get; set; }
     
    4749    public VariableStore VariableStore {
    4850      get { return variableStore; }
     51    }
     52
     53    [Storable]
     54    private TimeSpan executionTime;
     55    public TimeSpan ExecutionTime {
     56      get { return executionTime; }
     57      protected set {
     58        executionTime = value;
     59        OnExecutionTimeChanged();
     60      }
    4961    }
    5062    #endregion
     
    5668      : base(original, cloner) {
    5769      variableStore = cloner.Clone(original.variableStore);
     70      executionTime = original.executionTime;
    5871    }
    5972    public CSharpScript() {
    6073      variableStore = new VariableStore();
     74      executionTime = TimeSpan.Zero;
    6175      Code = CodeTemplate;
    6276    }
     
    6478      : base(code) {
    6579      variableStore = new VariableStore();
     80      executionTime = TimeSpan.Zero;
    6681    }
    6782
     
    94109    #endregion
    95110
    96     private Thread scriptThread;
    97111    public virtual void ExecuteAsync() {
    98112      if (compiledScript == null) return;
     113      executionTime = TimeSpan.Zero;
    99114      scriptThread = new Thread(() => {
    100115        Exception ex = null;
     116        var timer = new System.Timers.Timer(250) { AutoReset = true };
     117        timer.Elapsed += timer_Elapsed;
    101118        try {
    102119          OnScriptExecutionStarted();
     120          lastUpdateTime = DateTime.UtcNow;
     121          timer.Start();
    103122          compiledScript.Execute(VariableStore);
    104         }
    105         catch (Exception e) {
     123        } catch (Exception e) {
    106124          ex = e;
    107         }
    108         finally {
     125        } finally {
    109126          scriptThread = null;
     127          timer.Elapsed -= timer_Elapsed;
     128          timer.Stop();
     129          ExecutionTime += DateTime.UtcNow - lastUpdateTime;
    110130          OnScriptExecutionFinished(ex);
    111131        }
     
    118138      if (scriptThread == null) return;
    119139      scriptThread.Abort();
     140    }
     141
     142    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
     143      var timer = (System.Timers.Timer)sender;
     144      timer.Enabled = false;
     145      DateTime now = DateTime.UtcNow;
     146      ExecutionTime += now - lastUpdateTime;
     147      lastUpdateTime = now;
     148      timer.Enabled = true;
    120149    }
    121150
     
    141170      if (handler != null) handler(this, new EventArgs<string>(args));
    142171    }
     172
     173    public event EventHandler ExecutionTimeChanged;
     174    protected virtual void OnExecutionTimeChanged() {
     175      var handler = ExecutionTimeChanged;
     176      if (handler != null) handler(this, EventArgs.Empty);
     177    }
    143178  }
    144179}
Note: See TracChangeset for help on using the changeset viewer.