我正在以Windows服务的形式查看一些遗留代码。
我注意到在他们的OnStop()方法中,他们只是写入事件日志,但没有对象清理或终止任何线程的控制。有两个后台线程在服务启动时启动,所以我想知道,这项服务真的停止了吗?而且,如果是这样,线程是否正确关闭?
stop方法是否物理上终止了进程,还是只是一个逻辑停止,如果没有实现,实际上什么都不做?
答案 0 :(得分:1)
当服务停止时调用OnStop()方法,您可以清除对象并在此处停止线程等。如果您的线程在服务停止时不需要任何特殊操作,那么您可以离开OnStop方法
预计OnStop将在派生类中被覆盖。为了 服务有用,OnStart和OnStop都应该实现 您的服务类msdn
答案 1 :(得分:1)
停止服务与终止服务不同。这是一个逻辑条件。管理员会期望您在服务启动后停止执行任何操作。因此,您的服务不会妨碍他接下来要做的事情。假设备份目录或编辑配置文件,等等。
你没有 来实际实现它。 Windows也没有强制执行它,当您报告您已停止并且不会阻止您执行任何操作时,服务管理器会接受您的信息。但当然有可能让管理员感到困惑。
答案 2 :(得分:0)
回答第一个问题它终止了这个过程。 但它必须实现清理代码,因为一个常见的场景是你让线程在服务上运行并且它被停止但是由于线程,进程仍然在那里。我对左线程有相同的经验,所以我们应该实现Thread清理代码和其他可以阻止进程终止的资源。