/// <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); } } } }