На этом уроке мы поговорим о статусах потока: Unstarted, Running, Wait/Sleep/Join, Abort Requested, Stopped. Создадим функционал для остановки потоков по нажатию клавиш. И научимся сопротивляться этим остановкам.
Дата отправки отчёта:
26 февраля 2017 г.
Задание выполнено: за
49 мин.
Чему научился:
Узнал о существовании статуса потоков. Попытался ими управлять. Но не все получилось.
Что было сложным:
Непонятно зачем в функции Run() нужно 2 цикла. У меня все работает с одним.
Комментарии:
Попытался управлять Питонами с помощью статуса. Но не все получилось. Например, хотел по нажатию клавиши временно приостанавливать поток методом .Suspend(), а затем освобождать методом t[ip].Resume(); (См. в скриншоте закомментированный текст. Условие в строке 52 как-то странно работает: всегда true) Кто-то может указать на ошибку? Зато проверку Thread.ResetAbort(); сделал по-другому, менее жестко: я решил на 2 секунды приостановить выбранного питона, затем освободить его и поменять ему цвет на белый. В динамике это выглядит красиво.
Научился: Провел эксперименты с остановкой движения каждого питона. Трудности: Понять смысл работы с ThreadAbortException и методом Thread.ResetAbort(); Так до конца и не понял почему нужно было помещать в while() еще один while() и для чего применяли Thread.ResetAbort(); если все равно питон продолжал двигаться(((