监视Windows服务中的线程

时间:2010-09-09 17:37:09

标签: c# multithreading windows-services

我有一个Windows服务,它启动时会产生大约60个线程。我正在使用Nagios进行一般监控,我有所有必要的例程来向nagios发送数据。但是,我无法弄清楚如何获得所有线程的总和,并确保它们都没有死。

基本上我想做的是:

foreach(thread t in threadPool)
{
    if(t.isAlive())
    {
        PingHost(t.ThreadID);
    }
}

这似乎不是很困难,但我不知道从哪里开始。

3 个答案:

答案 0 :(得分:1)

只是评论,60是很多线程作为固定数字。您可能想要考虑一个处理循环(即使它有自己的专用线程) - 更容易调试和更具可伸缩性。

但是如果你真的需要这个,一个选项是......当线程启动时,执行一些共享计数器的互锁增量。在线程完成其工作之前,执行互锁减量。

答案 1 :(得分:1)

我建议将每个帖子添加到由Dictionary<int, Thread>键入的ManagedThreadId。然后将回调方法传递给每个在终止时返回其ManagedThreadId的线程。然后回调从字典中删除线程并通知Nagios。

您可以使用线程的Name属性作为基本描述性数据,或者创建一个自定义对象来保存有关进程的其他信息,并将其存储在字典而不是线程中。

答案 2 :(得分:0)

如果您对使用线程编程有一些特殊需求,SmartThreadPool项目可能会让您满意。