multithreading - 向 sleep 或阻塞线程发出信号以停止的最佳方法是什么?

标签 multithreading winapi windows-services signals

我需要关闭并更新一项服务。我在两种不同的情况下遇到了困难:

  1. 我有一些线程休眠很长时间。显然我等不及他们醒来完成关闭服务了。我有一个想法,使用 AutoResetEvent,当 sleep 间隔结束时,它由某个 Controller 线程设置(只需每两秒或其他时间检查一次),并在 OnClose 时间立即触发它。有没有更好的方法来促进这一点?

  2. 我有一个线程调用阻塞方法调用(我无法修改)。如何向这样的线程发出停止信号?

最佳答案

  1. 我不确定我是否正确理解了您的第一个问题,但是您是否考虑过使用 WaitForSingleObject作为 sleep 的替代方案?您可以指定超时以及要等待的对象,因此如果您希望它早点醒来,只需向该对象发出信号即可。

  2. “调用阻塞线程”到底是什么意思?或者您只是指阻塞调用?一般来说,没有办法在不强制终止线程的情况下中断它。但是,如果调用是系统调用,则可能有方法通过使调用失败来返回控制,例如。取消 I/O 或关闭关联的句柄。

关于multithreading - 向 sleep 或阻塞线程发出信号以停止的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796059/

相关文章:

c# - 如何使用 AOP 在 C# 中的不同线程之间共享数据?

c# - 在 .NET 中设置 HttpClient 以使其与多个线程一起工作并提供并发性

windows - RunDLL32 URL下载到文件

c++ - 删除全局数组时堆损坏

c# - 运行一天左右后,Windows 服务在尝试执行查询时开始出现 OracleExceptions

c# - 注销服务器时 Excel 和 C# 出错

java - 调用 postAtTime 时处理程序会自动跳过其他可运行对象/消息

c - 使用 Win32 函数基于用户输入动态滚动

Windows 服务的 C# ClickOnce 部署?

c++ - Boost.Asio Win32 Windows 应用程序