Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович

Бурные потоки / Замри!

  • На этом уроке мы поговорим о статусах потока:
    Unstarted, Running, Wait/Sleep/Join, Abort Requested, Stopped.
    Создадим функционал для остановки потоков по нажатию клавиш.
    И научимся сопротивляться этим остановкам.
  • Дата отправки отчёта: 7 июня 2016 г.
  • Задание выполнено: за 1 час. 00 мин.
  • Чему научился: останавливать поток
  • Что было сложным: успеть за Евгением Витольдовичем
  • Комментарии: Все гуд
  • Оценка видео-уроку:
Отчёт от 8835 за Бурные потоки / Замри!




Оцени работу

 
Сохранить страницу:

1. Евгений Волосатов
Евгений Волосатов
ответить
→  Булат  # Бурные потоки / Замри! / 2016-06-08 12:28

Отличная работа, Булат!


  • Отчёт оценивали:
    8835Булат+1   9237Mais+1   4992Николай+1   7119Новопашин Владимир+1   4467Alcatraz+1   4004Елена+1   6925Артём+1   3506Алексей|BrisK|Кривицкий+1   6452Кирилл Шмойлов+1   7645Александр Львович+1   10425Анастасия Мещерякова0   4395Денис+1   1Евгений Волосатов+1   2146Иван+1   9263Андрей Н.+1   5566Сергей+1   5026Екатерина+1   8886Михаил Ермишин+1   689Igorenzia+1   9567Максим+1   5369Archi+1  

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: Узнал о существовании статуса потоков. Попытался ими управлять. Но не все получилось.
Трудности: Непонятно зачем в функции Run() нужно 2 цикла. У меня все работает с одним.
Попытался управлять Питонами с помощью статуса. Но не все получилось. Например, хотел по нажатию клавиши временно приостанавливать поток методом .Suspend(), а затем освобождать методом t[ip].Resume(); (См. в скриншоте закомментированный текст. Условие в строке 52 как-то странно работает: всегда true) Кто-то может указать на ошибку? Зато проверку Thread.ResetAbort(); сделал по-другому, менее жестко: я решил на 2 секунды приостановить выбранного питона, затем освободить его и поменять ему цвет на белый. В динамике это выглядит красиво.
Научился: Останавливать поток по клавише и игнорировать запрос на его остановку
Трудности: разобраться в разнице между lock и Monitor. Как я понял lock это обертка для использовании функций класса Monitor, но этот класс предоставляет больше тонких настроек, не только вход и выход из критической секции. Также тело критической секции должно быть наиболее маленьким, ошибки все равно могут возникать. Об этом тут написано: https://blogs.msdn.microsoft.com/ericlippert/2009/03/06/locks-and-exceptions-do-not-mix/
Если зажать клавишу с номером потока и не отпускать, на поле в случайных местах, и даже на рамке появляется эта цифра цветом того потока, где случилось прерывание. Это видно на скиншоте)