我有一个Windows服务,它启动时会产生大约60个线程。我正在使用Nagios进行一般监控,我有所有必要的例程来向nagios发送数据。但是,我无法弄清楚如何获得所有线程的总和,并确保它们都没有死。
基本上我想做的是:
foreach(thread t in threadPool)
{
if(t.isAlive())
{
PingHost(t.ThreadID);
}
}
这似乎不是很困难,但我不知道从哪里开始。
答案 0 :(得分:1)
只是评论,60是很多线程作为固定数字。您可能想要考虑一个处理循环(即使它有自己的专用线程) - 更容易调试和更具可伸缩性。
但是如果你真的需要这个,一个选项是......当线程启动时,执行一些共享计数器的互锁增量。在线程完成其工作之前,执行互锁减量。
答案 1 :(得分:1)
我建议将每个帖子添加到由Dictionary<int, Thread>
键入的ManagedThreadId
。然后将回调方法传递给每个在终止时返回其ManagedThreadId
的线程。然后回调从字典中删除线程并通知Nagios。
您可以使用线程的Name属性作为基本描述性数据,或者创建一个自定义对象来保存有关进程的其他信息,并将其存储在字典而不是线程中。
答案 2 :(得分:0)
如果您对使用线程编程有一些特殊需求,SmartThreadPool项目可能会让您满意。