线程完成后如何更新main {}?

时间:2016-04-24 20:17:16

标签: c# .net multithreading

出于纯粹的线程学习目的,我试图创建一个老虎机的模拟。

3个卷轴,它们是3个独立的线程。他们等待一段随机的时间,然后提出1到9之间的随机数。

到目前为止,我已经取得了成功,但是,如何正确地让主{}知道所有3个卷轴何时完成"所以可以运行CheckJackpot() ,然后可以重新启动游戏(线程)再做一遍吗?

我试过设置一个bool" isFinished"在卷轴和主要检查它一段时间(真实),但这完全recks我的CPU。我在循环中添加了一个睡眠定时器,但是我可以告诉它这是如何草率编码,即使它可以在我的小实验中工作。然后每个卷轴还需要一段时间(真实)来检查isFinished是否返回false以重启我想象的游戏。

我已经了解了锁定语句,但我不相信这是我希望实现的正确解决方案。我有一种感觉,我需要了解"事件",虽然这可能是我的头脑,因为这个话题还没有在课堂上提出来。这种困境的正确解决方案是什么?

1 个答案:

答案 0 :(得分:2)

  • 不要使用线程。使用任务 - 它们本质上是相同的,但......它们有更好的API,更适合非永久性元素。确保在运行超过一秒的时间内将它们标记为长时间运行。

  • 任务 - 您可以等待多次完成。即将您创建的所有任务(3)保存在一个数组中,等待它们完成。结束。

对于主题:

  

并在一段时间内进行了主要检查(真实),

缺乏RTFM。

显然没有等待的循环会使CPU核心最大化。

  • 简单:THread.Sleep 50ms每个循环。 CPU占用率下降。
  • 不是真的 - 使用联锁和计数器。从3下降到0。
  • 阅读信号。