当其中一个子线程终止时,如何使Windows服务终止

时间:2009-12-17 00:35:07

标签: windows multithreading service

在Windows服务的ServiceStart()调用中,我创建一个线程并启动它 Thread1 =新的TThread1(假)

在子线程的执行过程中,有一个循环永远运行并且该服务应该这样做。

问题是当我在这个线程中出现错误时,我想终止线程,并且也停止服务。

如果启动的线程停止(失败),我怎样才能让服务停止运行。

3 个答案:

答案 0 :(得分:1)

可能是使用看门狗定时器: 在你的线程中你重置计时器(例如每次进入循环)。 当计时器的间隔期满时,你知道该线程可能不再工作了,所以你可以重启服务或者什么......

答案 1 :(得分:0)

更好的方法可能是捕获线程中的异常并记录它们。或者您可以捕获异常,记录它,然后停止服务。这样您就可以控制服务停止,并且您也可以深入了解正在生成的错误。

答案 2 :(得分:0)

拨打电话停止服务:

        bool StopService(string svr_name)
        {
            bool ret = false;
            if (svr_name.Length > 0)
            {
                try
                {
                    ServiceController sc = new ServiceController(svr_name);

                    if (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        return true;
                    }
                    sc.Stop();
                }
                catch (Exception)
                {
                    return false;
                }
            }
            return ret;
        }