using Amib.Threading.Internal; using System; using System.Threading; namespace Amib.Threading { public partial class SmartThreadPool { #region ThreadEntry class internal class ThreadEntry { /// /// The thread creation time /// The value is stored as UTC value. /// private readonly DateTime _creationTime; /// /// The last time this thread has been running /// It is updated by IAmAlive() method /// The value is stored as UTC value. /// private DateTime _lastAliveTime; /// /// A reference from each thread in the thread pool to its SmartThreadPool /// object container. /// With this variable a thread can know whatever it belongs to a /// SmartThreadPool. /// private SmartThreadPool _associatedSmartThreadPool; /// /// A reference to the current work item a thread from the thread pool /// is executing. /// public WorkItem CurrentWorkItem { get; set; } public Thread WorkThread; public ThreadEntry(SmartThreadPool stp, Thread th) { _associatedSmartThreadPool = stp; _creationTime = DateTime.UtcNow; _lastAliveTime = DateTime.MinValue; WorkThread = th; } public SmartThreadPool AssociatedSmartThreadPool { get { return _associatedSmartThreadPool; } } public void IAmAlive() { _lastAliveTime = DateTime.UtcNow; } public void Clean() { WorkThread = null; _associatedSmartThreadPool = null; } } #endregion } }