繁体   English   中英

监视Windows服务中的线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM