Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/01/08 15:05:37 (16 years ago)
Author:
gkronber
Message:
  • worked on #2
  • fixed some problems in communication between Grid and DistributedEngine
Location:
trunk/sources/HeuristicLab.Grid
Files:
3 edited

Legend:

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

    r32 r33  
    3232    private Dictionary<Guid, byte[]> waitingEngines;
    3333    private Dictionary<Guid, byte[]> runningEngines;
     34    private Dictionary<Guid, ManualResetEvent> waitHandles;
    3435    private Dictionary<Guid, byte[]> results;
    3536    private Dictionary<Guid, string> runningClients;
    3637    private object bigLock;
    3738    private ChannelFactory<IClient> clientChannelFactory;
    38 
    39     private event EventHandler ResultRecieved;
    40 
    4139    public int WaitingJobs {
    4240      get {
     
    6260      runningEngines = new Dictionary<Guid, byte[]>();
    6361      runningClients = new Dictionary<Guid, string>();
     62      waitHandles = new Dictionary<Guid, ManualResetEvent>();
    6463      results = new Dictionary<Guid, byte[]>();
    6564      bigLock = new object();
     
    9897        runningClients.Remove(guid);
    9998        results[guid] = result;
    100         OnResultRecieved(guid);
     99        waitHandles[guid].Set();
    101100      }
    102101    }
     
    106105        engineQueue.Enqueue(guid);
    107106        waitingEngines.Add(guid, engine);
     107        waitHandles.Add(guid, new ManualResetEvent(false));
    108108      }
    109109    }
     
    118118
    119119    internal byte[] GetResult(Guid guid) {
    120       ManualResetEvent waitHandle = new ManualResetEvent(false);
     120      return GetResult(guid, System.Threading.Timeout.Infinite);
     121    }
     122    internal byte[] GetResult(Guid guid, int timeout) {
    121123      lock(bigLock) {
    122         if(results.ContainsKey(guid)) {
    123           byte[] result = results[guid];
    124           results.Remove(guid);
    125           return result;
     124        if(waitHandles.ContainsKey(guid)) {
     125          ManualResetEvent waitHandle = waitHandles[guid];
     126          if(waitHandle.WaitOne(timeout, false)) {
     127            waitHandle.Close();
     128            waitHandles.Remove(guid);
     129            byte[] result = results[guid];
     130            results.Remove(guid);
     131            return result;
     132          } else {
     133            return null;
     134          }
    126135        } else {
    127           ResultRecieved += delegate(object source, EventArgs args) {
    128             ResultRecievedEventArgs resultArgs = (ResultRecievedEventArgs)args;
    129             if(resultArgs.resultGuid == guid) {
    130               waitHandle.Set();
    131             }
    132           };
     136          return null;
    133137        }
    134       }
    135 
    136       waitHandle.WaitOne();
    137       waitHandle.Close();
    138 
    139       lock(bigLock) {
    140         byte[] result = results[guid];
    141         results.Remove(guid);
    142         return result;
    143138      }
    144139    }
     
    157152      }
    158153    }
    159 
    160     private void OnResultRecieved(Guid guid) {
    161       ResultRecievedEventArgs args = new ResultRecievedEventArgs();
    162       args.resultGuid = guid;
    163       if(ResultRecieved != null) {
    164         ResultRecieved(this, args);
    165       }
    166     }
    167 
    168     private class ResultRecievedEventArgs : EventArgs {
    169       public Guid resultGuid;
    170     }
    171154  }
    172155}
  • trunk/sources/HeuristicLab.Grid/GridServer.cs

    r32 r33  
    4444      return engineStore.GetResult(guid);
    4545    }
     46    public byte[] TryEndExecuteEngine(Guid guid, int timeout) {
     47      return engineStore.GetResult(guid, timeout);
     48    }
    4649
    4750    public void AbortEngine(Guid engine) {
  • trunk/sources/HeuristicLab.Grid/IGridServer.cs

    r2 r33  
    3030    [OperationContract]
    3131    Guid BeginExecuteEngine(byte[] engine);
    32    
    3332    [OperationContract]
    3433    byte[] EndExecuteEngine(Guid engineGuid);
    35 
     34    [OperationContract]
     35    byte[] TryEndExecuteEngine(Guid engineGuid, int timeout);
    3636    [OperationContract]
    3737    void AbortEngine(Guid engineGuid);
Note: See TracChangeset for help on using the changeset viewer.