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
}
}