[英]Monitor Threads in Windows Service
我有一个Windows服务,启动时会产生约60个线程。 我正在使用Nagios进行常规监视,并且我具有将数据发送到Nagios的所有必要例程。 但是,我无法弄清楚如何获得所有线程的总和,并确保没有一个线程死掉。
基本上我想做的是:
foreach(thread t in threadPool)
{
if(t.isAlive())
{
PingHost(t.ThreadID);
}
}
看来这应该不是很困难,但是我不确定从哪里开始。
只需评论一下,60是固定数量的线程。 您可能想考虑一个处理循环(即使它具有自己的专用线程)-调试起来更容易且可扩展性更高。
但是,如果您真的需要这个,一种选择是...在线程启动时,对某些共享计数器进行互锁递增。 在线程完成其工作之前,进行互锁的递减。
我建议将每个线程添加到由其ManagedThreadId
键控的Dictionary<int, Thread>
。 然后将回调方法传递给在终止时返回其ManagedThreadId
每个线程。 然后,回调将线程从字典中删除,并通知Nagios。
您可以使用线程的Name属性获取基本的描述性数据,或者创建一个自定义对象来保存有关进程的其他信息,并将其存储在字典中而不是线程中。
如果您对使用线程进行编程有特殊需要, SmartThreadPool项目可能会令您满意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.