2016-04-24 3 views
0

Для чисто потоков обучения я пытаюсь создать имитацию игрового автомата.Как обновить main {}, когда потоки закончены?

3 катушки, которые представляют собой 3 отдельных резьбы. Они ожидают случайного промежутка времени, а затем приходят с рандомизированным номером между 1 и 9.

. Однако мне удалось это сделать до сих пор, однако, : «done», поэтому можно запустить CheckJackpot(), после чего перезапустить игру (потоки), чтобы сделать это снова и снова?

Я попытался настроить bool «isFinished» в барабанах и вначале проверил его (правда), но полностью перезаписал мой процессор. Я подошел поближе, добавив таймер сна в цикле, хотя я могу сказать, как это небрежное кодирование, даже если оно будет работать в моем небольшом эксперименте. Каждая катушка также понадобится некоторое время (правда), чтобы проверить, возвращается ли isFinished к false, чтобы перезапустить игру, которую я себе представляю.

Я узнал о заявлениях о блокировке, однако я не верю, что это правильное решение для того, чего я хочу достичь. У меня есть ощущение, что мне нужно узнать о «событиях», хотя это может быть у меня над головой, поскольку эта тема еще не воспитывалась в классе. Какое правильное решение этой дилеммы?

ответ

2
  • Не использовать нитки. Используйте Задачи - они, по сути, одинаковы, но ... они имеют лучший API и лучше подходят для непостоянных элементов. Обязательно отмечайте их как долгое время при работе более чем на одну секунду.

  • Задачи - вы можете подождать по завершении нескольких. То есть сохраните все задачи, которые вы создаете (3) в массиве, дождитесь их завершения. Законченный.

Для нитей:

и имел главный проверить его в какое-то время (истина),

Недостаток RTFM.

OBVIOUSLY цикл без ожидания приведет к максимальному выходу ядра процессора.

  • Easy: THread.Sleep 50ms каждый цикл. Снижает производительность процессора.
  • Нет, пока верно - используйте блокировку и счетчик. Работает от 3 до 0.
  • Читайте на сигналах.
+0

Все, что мне нужно было знать, спасибо. – Amivit

Смежные вопросы