Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线程完成后如何更新主{}?_C#_.net_Multithreading - Fatal编程技术网

C# 线程完成后如何更新主{}?

C# 线程完成后如何更新主{}?,c#,.net,multithreading,C#,.net,Multithreading,出于纯粹的线程学习目的,我尝试创建一个模拟吃角子老虎机 3个卷轴,由3条独立的线组成。他们随机等待一段时间,然后得出一个介于1和9之间的随机数 不过,到目前为止,我已经成功地做到了这一点,如何正确地让main{}知道所有3个卷都“完成”了,这样就可以运行CheckJackpot(),然后重新启动游戏(线程)以重新开始? 我尝试在卷轴中设置一个bool“isFinished”,并让main在一段时间内检查它(true),但这会完全占用我的cpu。通过在循环中添加一个睡眠计时器,我更进一步了,尽管我

出于纯粹的线程学习目的,我尝试创建一个模拟吃角子老虎机

3个卷轴,由3条独立的线组成。他们随机等待一段时间,然后得出一个介于1和9之间的随机数

不过,到目前为止,我已经成功地做到了这一点,如何正确地让main{}知道所有3个卷都“完成”了,这样就可以运行CheckJackpot(),然后重新启动游戏(线程)以重新开始?

我尝试在卷轴中设置一个bool“isFinished”,并让main在一段时间内检查它(true),但这会完全占用我的cpu。通过在循环中添加一个睡眠计时器,我更进一步了,尽管我可以看出这是多么草率的编码,即使它在我的小实验中可以工作。然后,每个卷轴也需要一段时间(true)来检查isFinished是否返回false以重新启动游戏

我已经了解了锁语句,但是我不认为这是我想要实现的正确解决方案。我有一种感觉,我需要学习有关“事件”的知识,尽管这可能是我的头脑中的一个问题,因为这个话题还没有在课堂上提到过。解决这一困境的正确方法是什么?

  • 不要使用线程。使用任务-它们本质上是相同的,但是。。。。它们具有更好的API,更适合于非永久性元件。当运行时间超过一秒钟的某一部分时,请确保将它们标记为长时间运行

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

对于线程:

过了一段时间,让main检查一下(正确)

缺乏RTFM

显然,不等待的循环将使CPU核心达到最大值

  • 简单:线程。每个循环睡眠50毫秒。把CPU的速度降下来
  • 真正使用时无联锁和计数器。从3降到0
  • 仔细阅读信号
      • 不要使用线程。使用任务-它们本质上是相同的,但是。。。。它们具有更好的API,更适合于非永久性元件。当运行时间超过一秒钟的某一部分时,请确保将它们标记为长时间运行

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

      对于线程:

      过了一段时间,让main检查一下(正确)

      缺乏RTFM

      显然,不等待的循环将使CPU核心达到最大值

      • 简单:线程。每个循环睡眠50毫秒。把CPU的速度降下来
      • 真正使用时无联锁和计数器。从3降到0
      • 仔细阅读信号