【发布时间】:2009-11-18 15:50:16
【问题描述】:
我创建了一个 Windows 服务,它目前有三个计时器。第一个定时器每 15 秒唤醒一次,第二个定时器每分钟唤醒一次。第三个计时器每天都在醒来。
问题是这些每次都产生新线程,并且有一次线程池完全用完。是否只产生 3 个线程而不产生更多新线程。
我的代码如下所示:
protected Onstart()
{
var timer1 = new TImer();
timer.Elapsed += Event1;
timer1.interval = 60000;
timer1.start();
var timer2 = new TImer();
timer2.Elapsed += Event2;
timer2.interval = 60000;
timer2.start();
}
private Event1(object,elapsedeventargs)
{
var workerthread1 = **new thread**(workerthreadfunc1)
workerthread1.start();
}
private Event2(object,elapsedeventargs)
{
var workerthread2 = **new thread**(workerthreadfunc2)
workerthread2.start();
}
所以你可以看到它正在创建新线程,这将在某个时候用完线程池中的所有线程并突然停止 Windows 服务。目前它正在停止并记录事件 ID 为 5000 的事件日志。
【问题讨论】:
-
如果您告诉我们或向我们展示workerthreadfuncN的作用可能会更清楚。看起来你每 15 秒、每分钟和每一天都有一些你想要完成的工作。至于日常工作,这可能由某种任务调度程序/cron 作业更好地处理。我的回答将基于这是您的目标这一假设。
-
所以我用过这个。 ThreadPool.QueueUserWorkItem(new WaitCallback(WorkerThreadFunction1));而且我认为有人建议 processtimerevent 已经在一个线程上。所以我牢记这一点,如果这个使用线程池的解决方案失败,我会实施。 ——
标签: c# windows multithreading threadpool