【问题标题】:How to make a Windows Service terminate when one of its sub-threads terminate如何使 Windows 服务在其子线程之一终止时终止
【发布时间】:2009-12-29 00:14:25
【问题描述】:

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

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

问题是当我在这个线程中遇到错误时,我想终止线程,并停止服务。

如果服务已启动的线程停止(失败),我如何让服务自行停止。

【问题讨论】:

    标签: windows multithreading service


    【解决方案1】:

    一种可能是使用看门狗定时器: 在您的线程中,您重置计时器(例如,每次进入循环时)。 当计时器的间隔到期时,您知道该线程可能不再工作,因此您可以重新启动服务或其他...

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        拨打电话停止服务:

        布尔停止服务(字符串 svr_name) { 布尔 ret = 假; if (svr_name.Length > 0) { 尝试 { ServiceController sc = new ServiceController(svr_name); 如果(sc.Status == ServiceControllerStatus.Stopped) { 返回真; } sc.停止(); } 捕捉(例外) { 返回假; } } 返回 ret; }

        【讨论】:

          猜你喜欢
          • 2016-09-21
          • 1970-01-01
          • 2011-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-22
          • 2011-12-19
          • 1970-01-01
          相关资源
          最近更新 更多