【问题标题】: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;
}