Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/01/08 16:19:11 (17 years ago)
Author:
gkronber
Message:

fixed some synchronization issues in DistributedEngine and grid infrastructure

(ticket ref #2)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Grid/ClientForm.cs

    r34 r35  
    4646    private ProcessingEngine currentEngine;
    4747    private string clientUrl;
     48    private object locker = new object();
    4849
    4950    public ClientForm() {
     
    9697
    9798    private void fetchOperationTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
    98       byte[] engineXml;
    99       fetchOperationTimer.Stop();
    100       if (engineStore.TryTakeEngine(clientUrl, out currentGuid, out engineXml)) {
    101         currentEngine = RestoreEngine(engineXml);
    102         if (InvokeRequired) { Invoke((MethodInvoker)delegate() { statusTextBox.Text = "Executing engine"; }); } else statusTextBox.Text = "Executing engine";
    103         currentEngine.Finished += delegate(object src, EventArgs args) {
    104           byte[] resultXml = SaveEngine(currentEngine);
    105           engineStore.StoreResult(currentGuid, resultXml);
    106           currentGuid = Guid.Empty;
    107           currentEngine = null;
    108           fetchOperationTimer.Interval = 100;
     99      lock(locker) {
     100        byte[] engineXml;
     101        fetchOperationTimer.Stop();
     102        if(engineStore.TryTakeEngine(clientUrl, out currentGuid, out engineXml)) {
     103          currentEngine = RestoreEngine(engineXml);
     104          if(InvokeRequired) { Invoke((MethodInvoker)delegate() { statusTextBox.Text = "Executing engine"; }); } else statusTextBox.Text = "Executing engine";
     105          currentEngine.Finished += delegate(object src, EventArgs args) {
     106            byte[] resultXml = SaveEngine(currentEngine);
     107            engineStore.StoreResult(currentGuid, resultXml);
     108            currentGuid = Guid.Empty;
     109            currentEngine = null;
     110            fetchOperationTimer.Interval = 100;
     111            fetchOperationTimer.Start();
     112          };
     113          currentEngine.Execute();
     114        } else {
     115          if(InvokeRequired) { Invoke((MethodInvoker)delegate() { statusTextBox.Text = "Waiting for engine"; }); } else statusTextBox.Text = "Waiting for engine";
     116          fetchOperationTimer.Interval = 5000;
    109117          fetchOperationTimer.Start();
    110         };
    111         currentEngine.Execute();
    112       } else {
    113         if(InvokeRequired) { Invoke((MethodInvoker)delegate() { statusTextBox.Text = "Waiting for engine"; }); } else statusTextBox.Text = "Waiting for engine";
    114         fetchOperationTimer.Interval = 5000;
    115         fetchOperationTimer.Start();
     118        }
    116119      }
    117120    }
    118121    public void Abort(Guid guid) {
    119       if(!IsRunningEngine(guid)) return;
    120       currentEngine.Abort();
     122      lock(locker) {
     123        if(!IsRunningEngine(guid)) return;
     124        currentEngine.Abort();
     125      }
    121126    }
    122127    public bool IsRunningEngine(Guid guid) {
Note: See TracChangeset for help on using the changeset viewer.