2016-04-24 54 views
0

純粹爲了線程學習的目的,我試圖創建一個老虎機的模擬。線程完成時如何更新main {}

3個卷軸,它們是3個獨立的線程。他們隨機等待一段時間,然後拿出一個1到9之間的隨機數字。

我已經成功了,但是,到目前爲止,我如何正確讓主{}知道3個卷軸是「完成」的,所以CheckJackpot()可以運行,然後可以重新啓動遊戲(線程)重新執行一遍?

我試着在卷軸上設置一個bool「isFinished」,並且主要在一段時間內檢查它(真),但是這完全擋住了我的cpu。通過在循環中添加睡眠定時器,我更接近了一步,儘管我可以告訴它這是不是馬虎的編碼,即使它可以在我的小實驗中工作。然後每個卷軸也需要一段時間(真)來檢查isFinished是否回到假,以重新開始我想象的遊戲。

我已經瞭解了鎖定語句,但我不相信這是我想要實現的正確解決方案。我有一種感覺,我需要了解「事件」,儘管它可能會超過我的頭,因爲這個話題還沒有在課堂上提出。什麼是這個困境的妥善解決方案?

回答

2
  • 請勿使用線程。使用任務 - 它們本質上是相同的,但是......它們具有更好的API並且更適合於非永久性元素。確保在運行多於一秒的時間內將它們標記爲長時間運行。

  • 任務 - 您可以等待完成多個。即將所有創建的任務(3)保存到數組中,等待它們完成。成品。

線程:

,不得不主要檢查它在一段時間(真),

缺乏RTFM的。

顯而易見,沒有等待的循環將最大限度地利用CPU內核。

  • 簡單:THread.Sleep每個循環50ms。採取CPU方式。
  • 沒有,而是使用互鎖和計數器。從3降到0.
  • 閱讀信號。
+0

我需要知道的一切,謝謝。 – Amivit