/// <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
 }
예제 #2
0
 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);
    }
예제 #4
0
 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);
             }
         }
     }
 }