我需要关闭并更新一项服务。我在两种不同的情况下遇到了困难:
我有一些线程休眠很长时间。显然我等不及他们醒来完成关闭服务了。我有一个想法,使用 AutoResetEvent,当 sleep 间隔结束时,它由某个 Controller 线程设置(只需每两秒或其他时间检查一次),并在 OnClose 时间立即触发它。有没有更好的方法来促进这一点?
我有一个线程调用阻塞方法调用(我无法修改)。如何向这样的线程发出停止信号?
最佳答案
我不确定我是否正确理解了您的第一个问题,但是您是否考虑过使用
WaitForSingleObject
作为sleep
的替代方案?您可以指定超时以及要等待的对象,因此如果您希望它早点醒来,只需向该对象发出信号即可。“调用阻塞线程”到底是什么意思?或者您只是指阻塞调用?一般来说,没有办法在不强制终止线程的情况下中断它。但是,如果调用是系统调用,则可能有方法通过使调用失败来返回控制,例如。取消 I/O 或关闭关联的句柄。
关于multithreading - 向 sleep 或阻塞线程发出信号以停止的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796059/