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