【问题标题】:Calling a Running thread c#调用正在运行的线程 c#
【发布时间】:2014-10-24 09:03:14
【问题描述】:

我有一个 Windows 服务,主线程产生几个子线程来执行工作。主线程按名称维护这些线程的列表。当一个孩子完成时,主线程将其从列表中删除。如果子线程尚未运行(通过检查列表),Main 使用计时器定期启动子线程。线程作为“即发即弃”线程启动。 有时子线程可能会挂起,或者可能只是需要很长时间。但是我的主线程无法知道。我希望主线程能够“调用”一个子线程并询问“你在做什么吗?”如果孩子有反应,那么我知道他没有挂起。

【问题讨论】:

  • 你有什么理由不只是在这里利用TPL
  • 您的目标是什么? c# 有很多多线程工具可以帮助你管理线程。
  • C# 中的每个线程都有ThreadState 属性。为什么不检查状态是否为Running
  • @James 可能出于同样的原因每个人都坚持使用套接字而不是更高级别的构造:不知道它们存在。
  • 修复错误,尝试在其上贴创可贴不会止血。

标签: c# multithreading


【解决方案1】:

你可以使用心跳

每次执行一些小动作时,子线程都会用当前的 UTC 时间更新一个变量。每个线程(或并发字典)都需要一个 (properly locked) 变量。

您的主线程会定期检查这些心跳。如果心跳早于某个给定的时间,则主线程知道子线程的某些操作花费的时间比应该花费的时间长得多。

【讨论】:

  • 感谢您的回复。我最初的解决方案是类似的。我只是想知道是否有某种方法可以进行函数调用或其他线程间通信机制,但也许对于我目前拥有的模型,你的可能是最好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多