/// <summary> /// [Game thread] Sends the parameters to the AI thread. /// </summary> /// <param name="game_time">Current in-game time (in seconds)</param> public static void Send(float game_time) { Instance.CurrentGameTime = game_time; lock (ThreadQueue) { ThreadQueue.Enqueue(Instance); } ThreadSignal.Set(); // Waking up the Get() function Clear(); // Resetting the instance for next update }
protected internal override bool BeforeLog(LogEntry logEntry) { lock (LogQueue) { LogQueue.Add(new KeyValuePair <Logger, LogEntry>(this.Logger, logEntry)); } ThreadSignal.Set(); return(true); }
/// <summary> /// [AI thread] Retrieves the last parameters sent to the AI thread. /// </summary> /// <returns></returns> public static AI_Params Get() { AI_Params p; ThreadSignal.WaitOne(); // Waiting for a Send() call lock (ThreadQueue) { p = ThreadQueue.Dequeue(); } if (ThreadQueue.Count == 0) { ThreadSignal.Reset(); // Going to sleep if nothing else in the queue } return(p); }
private static void LogWorker() { while (true) { ThreadSignal.WaitOne(); List <KeyValuePair <Logger, LogEntry> > logEntriesQueue = null; lock (LogQueue) { logEntriesQueue = new List <KeyValuePair <Logger, LogEntry> >(LogQueue); //LogQueue.ToList(); LogQueue.Clear(); } foreach (KeyValuePair <Logger, LogEntry> kv in logEntriesQueue) { try { kv.Key.Log(kv.Value); } catch (Exception ex) { OnLogError(kv.Key, "Asynchronous Logger error.", ex); } } } }