Changeset 378 for trunk/sources/HeuristicLab.CEDMA.Server/RunScheduler.cs
- Timestamp:
- 07/10/08 12:19:05 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.CEDMA.Server/RunScheduler.cs
r377 r378 36 36 private JobManager jobManager; 37 37 private const int RELEASE_INTERVAL = 5; 38 private object remoteCommLock = new object(); 39 38 40 public RunScheduler(Database database, JobManager jobManager) { 39 41 this.database = database; … … 47 49 } 48 50 private void ReleaseWaitingRuns() { 49 ICollection<RunEntry> runs = database.GetRuns(ProcessStatus.Waiting); 50 jobManager.Reset(); 51 ICollection<RunEntry> runs; 52 lock(remoteCommLock) { 53 runs = database.GetRuns(ProcessStatus.Waiting); 54 } 51 55 foreach(RunEntry entry in runs) { 52 56 IOperatorGraph opGraph = (IOperatorGraph)DbPersistenceManager.Restore(entry.RawData); 53 54 57 Scope scope = new Scope(); 55 58 AtomicOperation op = new AtomicOperation(opGraph.InitialOperator, scope); 56 WaitHandle wHandle = jobManager.BeginExecuteOperation(scope, op); 59 WaitHandle wHandle; 60 lock(remoteCommLock) { 61 wHandle = jobManager.BeginExecuteOperation(scope, op); 62 database.UpdateRunStatus(entry.Id, ProcessStatus.Active); 63 database.UpdateRunStart(entry.Id, DateTime.Now); 64 } 57 65 58 ThreadPool.QueueUserWorkItem(delegate(object state) { 59 wHandle.WaitOne(); 60 jobManager.EndExecuteOperation(op); 61 entry.Status = ProcessStatus.Finished; 62 database.UpdateRunStatus(entry.Id, entry.Status); 63 database.UpdateRunFinished(entry.Id, DateTime.Now); 64 }); 66 ThreadPool.QueueUserWorkItem(WaitForFinishedRun, new object[] {wHandle, op, entry}); 67 } 68 } 65 69 66 entry.Status = ProcessStatus.Active; 67 database.UpdateRunStatus(entry.Id, entry.Status); 68 database.UpdateRunStart(entry.Id, DateTime.Now); 70 private void WaitForFinishedRun(object state) { 71 object[] param = (object[])state; 72 WaitHandle wHandle = (WaitHandle)param[0]; 73 AtomicOperation op = (AtomicOperation)param[1]; 74 RunEntry entry = (RunEntry)param[2]; 75 wHandle.WaitOne(); 76 wHandle.Close(); 77 lock(remoteCommLock) { 78 jobManager.EndExecuteOperation(op); 79 database.UpdateRunStatus(entry.Id, ProcessStatus.Finished); 80 database.UpdateRunFinished(entry.Id, DateTime.Now); 69 81 } 70 82 }
Note: See TracChangeset
for help on using the changeset viewer.