Changeset 380 for trunk/sources/HeuristicLab.CEDMA.Server
- Timestamp:
- 07/10/08 17:22:04 (16 years ago)
- Location:
- trunk/sources/HeuristicLab.CEDMA.Server
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.CEDMA.Server/AgentScheduler.cs
r377 r380 46 46 ClearFinishedEngines(); 47 47 CreateNewEngines(); 48 StepAllEngines(); 48 if(engines.Count == 0) Thread.Sleep(10000); 49 else StepAllEngines(); 49 50 } 50 51 } -
trunk/sources/HeuristicLab.CEDMA.Server/RunScheduler.cs
r378 r380 37 37 private const int RELEASE_INTERVAL = 5; 38 38 private object remoteCommLock = new object(); 39 private object collectionsLock = new object(); 40 private Queue<WaitHandle> waithandles; 41 private Dictionary<WaitHandle, AtomicOperation> runningOperations; 42 private Dictionary<WaitHandle, long> runningEntries; 39 43 40 44 public RunScheduler(Database database, JobManager jobManager) { 41 45 this.database = database; 42 46 this.jobManager = jobManager; 47 runningOperations = new Dictionary<WaitHandle, AtomicOperation>(); 48 runningEntries = new Dictionary<WaitHandle, long>(); 49 waithandles = new Queue<WaitHandle>(); 50 Thread resultsGatheringThread = new Thread(GatherResults); 51 resultsGatheringThread.Start(); 43 52 } 44 53 public void Run() { … … 64 73 } 65 74 66 ThreadPool.QueueUserWorkItem(WaitForFinishedRun, new object[] {wHandle, op, entry}); 75 lock(collectionsLock) { 76 waithandles.Enqueue(wHandle); 77 runningOperations[wHandle] = op; 78 runningEntries[wHandle] = entry.Id; 79 } 67 80 } 68 81 } 69 82 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); 83 private void GatherResults() { 84 while(true) { 85 if(waithandles.Count == 0) Thread.Sleep(1000); 86 else { 87 WaitHandle w; 88 lock(collectionsLock) { 89 w = waithandles.Dequeue(); 90 } 91 w.WaitOne(); 92 long id; 93 AtomicOperation op; 94 lock(collectionsLock) { 95 id = runningEntries[w]; 96 runningEntries.Remove(w); 97 op = runningOperations[w]; 98 runningOperations.Remove(w); 99 } 100 w.Close(); 101 lock(remoteCommLock) { 102 jobManager.EndExecuteOperation(op); 103 database.UpdateRunStatus(id, ProcessStatus.Finished); 104 database.UpdateRunFinished(id, DateTime.Now); 105 } 106 } 81 107 } 82 108 } -
trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs
r378 r380 56 56 private void InitAgentScheduler() { 57 57 AgentScheduler scheduler = new AgentScheduler(database); 58 ThreadPool.QueueUserWorkItem(delegate(object status) { scheduler.Run(); }); 58 Thread agentSchedulerThread = new Thread(scheduler.Run); 59 agentSchedulerThread.Start(); 59 60 } 60 61 … … 63 64 jobManager.Reset(); 64 65 RunScheduler scheduler = new RunScheduler(database, jobManager); 65 ThreadPool.QueueUserWorkItem(delegate(object status) { scheduler.Run(); }); 66 Thread runSchedulerThread = new Thread(scheduler.Run); 67 runSchedulerThread.Start(); 66 68 } 67 69
Note: See TracChangeset
for help on using the changeset viewer.