private void DoMainProcessingLoop() { int startTime = GetTime(); int iterations = 0; int lastSynchronisation = GetTime(); C.log.Info("Entering UpdateAnts - UpdatePheromones loop"); while (GetTime() - startTime < maxTime) { List <WorkerStatus> statuses = GetStatusesWaitingForProcessing(); if (statuses.Count >= 0) { ProcessWorkerStatuses(statuses); } Thread.Sleep(1000); iterations += 1; } C.log.Info("Ending..."); CommunicatorWithChildren.Stop(); KillWorkers(); C.log.Info("Best path:"); if (bestTrail != null) { ACOExample.Display(bestTrail); } C.log.Info("Best path length: " + bestLength); C.log.Info("Stopping. Waiting for stdin..."); Console.ReadKey(); }
public static void StopWorkers() { foreach (var worker in workers.Keys) { CommunicatorWithChildren.SendToChild(worker, new StopWorker()); } workers.Clear(); freeWorkersQueue.Clear(); socketToJid.Clear(); }
public static void ServerExample() { CommunicatorWithChildren.InitializeServer(); int k = 30; while (--k > 0) { Thread.Sleep(1000); Console.Out.WriteLine("Received msgs so far: {0}", AsynchronousCommunicationUtils.reception); } }
private static void DelegateTasksToWorkers() { while (freeWorkersQueue.Count > 0) { if (tasksQueue.Count == 0) { return; } var task = tasksQueue.Dequeue(); var worker = freeWorkersQueue.Dequeue(); CommunicatorWithChildren.SendToChild(worker, task); workers[worker].IsBusy = true; workers[worker].TaskIdLastOrCurrentlyExecuted = task.Id; workers[worker].TaskNameLastOrCurrentlyExecuted = task.Name; } }
private static void InjectCallbacks() { RegisterWorker.OnReceive += (sender, registerWorker) => { C.log.Info("RegisterWorker received"); var jobId = registerWorker.JobId; workers[jobId] = new WorkerStatus(); freeWorkersQueue.Enqueue(jobId); socketToJid[sender] = jobId; CommunicatorWithChildren.SendToChild(jobId, new RegisterWorkerConfirm()); DelegateTasksToWorkers(); }; QueueTaskReturnValue.OnReceive += (sender, returnValue) => { C.log.Info("QueueTaskReturnValue received"); promises[returnValue.Id].SetResult(returnValue.OutputData); var jid = socketToJid[sender]; freeWorkersQueue.Enqueue(jid); workers[jid].IsBusy = false; DelegateTasksToWorkers(); }; }
public static void Initialize() { InjectCallbacks(); CommunicatorWithChildren.InitializeServer(); }