我对线程中的计时器有疑问?
我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Testing testing = new Testing();
Thread thread = new Thread(new ThreadStart(delegate
{
testing.Start();
}));
thread.IsBackground = true;
thread.Start();
}
}
public class Testing
{
System.Threading.Timer timer = null;
public void Start()
{
if (timer == null)
timer = new System.Threading.Timer(timerTick, null, 500, 500);
List<ManualResetEvent> amanual = new List<ManualResetEvent>();
for (int index = 0; index < 10; index++)
{
ManualResetEvent manual = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object context)
{
this.RunningThreadPool(context);
manual.Set();
}
));
amanual.Add(manual);
}
WaitHandle.WaitAll(amanual.ToArray());
Console.WriteLine("Task complete");
}
void timerTick(object sender)
{
Console.WriteLine("Timer running");
}
public void RunningThreadPool(object context)
{
Console.WriteLine("Thread in Threadpool is running...");
}
}
}
这就是结果 Threadpool中的线程正在运行... Threadpool中的线程正在运行... Threadpool中的线程正在运行... Threadpool中的线程正在运行... Threadpool中的线程正在运行... Threadpool中的线程正在运行... Threadpool中的线程正在运行... Threadpool中的线程正在运行... Threadpool中的线程正在运行... Threadpool中的线程正在运行... 任务完成 定时器运行 定时器运行 定时器运行 定时器正在运行
我有一个问题,即如何在线程池执行之前运行计时器。除了在线程池上设置计时器。因为我需要在线程池上定时检查线程。
答案 0 :(得分:0)
我会说500毫秒是足够的时间来完成你的工作队列,在Timer发出一次之前。 10个Console.WriteLine
电话不会起到太大作用。
假设你的工作量有点重:
Timer在ThreadPool中运行其回调,因此在其他工作排队后排队等待...即它在队列中的最后一个。因为您排队的项目多于ThreadPool中的线程,并且ThreadPool仅在长时间加载时旋转新线程,所以ThreadPool无法及时执行Timer的回调。