Cамоучитель по VB.NET


Знакомство с многопоточностью


Gl10
Многопоточные приложенияЗнакомство с многопоточностью Домены приложений Создание потоков Метод Join Имена потоков, CurrentThread и ThreadStateОкно потоков Приостановка потока Завершение или п...
Знакомство с многопоточностью
Каждая программа работает в определенном контексте, описывающем распределение кода и данных в памяти. При сохранении контекста фактически сохраняется состояние программного потока, что позволяет...
Домены приложений
Программные потоки .NET работают в так называемых доменах приложений, определяемых в документации как «изолированная среда, в которой выполняется приложение». Домен приложения можно рассматривать...
Следующий шаг: кнопка Show Count
Допустим, вы решили проявить творческую фантазию и придать форме вид, показанный на Рисунок 10.9. Обратите внимание: кнопка Show Count пока недоступна....
. Форма с заблокированной кнопкой
Предполагается, что отдельный поток выполняет подсчет и разблокирует недоступную кнопку. Конечно, это можно сделать; более того, такая задача возникает достаточно часто. К сожалению, вы не сможете...
Почему при многопоточном программировании возникает столько проблем?
Теперь, когда вы получили некоторое представление о многопоточном программировании и о потенциальных проблемах, с ним связанных, мы решили, что в конце этой главы будет уместно ответить на вопрос,...
Создание потоков
Начнем с элементарного примера. Допустим, вы хотите запустить в отдельном потоке процедуру, которая в бесконечном цикле уменьшает значение счетчика. Процедура определяется в составе класса:Public...
Простая многопоточная программно время работы
Если программа будет работать в течение большегошромежутка времени, результат будет выглядеть примерно так, как показано на Рисунок 10.2. Мы видим, что выполнение запущенного потока приостанавлива...
Переключение между потоками в простой многопоточной программе
При прерывании потоков и передаче управления другим потокам операционная система использует принцип вытесняющей многопоточности посредством квантования времени. Квантование времени также решает од...
Процессор предоставляется и потокам с более низким приоритетом
Команда назначает новому потоку максимальный приоритет и уменьшает приоритет главного потока. Из Рисунок 10.3 видно, что новый поток начинает работать быстрее, чем прежде, но, как показывает Рисун...
Метод Join
Иногда программный поток требуется приостановить до момента завершения другого потока. Допустим, вы хотите приостановить поток 1 до тех пор, пока поток 2 не завершит свои вычисления. Для этого из...
Имена потоков, CurrentThread и ThreadState
Перед запуском каждому потоку рекомендуется присвоить содержательное имя, поскольку имена значительно упрощают отладку многопоточных программ. Для этого следует задать значение свойства Name коман...
Окно потоков
Окно потоков (Threads window) Visual Studio .NET оказывает неоценимую помощь в отладке многопоточных программ. Оно активизируется командой подменю Debug > Windows в режиме прерывания. Допустим,...
Окно потоков
Стрелкой в первом столбце помечается активный поток, возвращаемый свойством Thread.CurrentThread. Столбец ID содержит числовые идентификаторы потоков. В следующем столбце перечислены имена потоков...
Приостановка потока
Временно неиспользуемые потоки можно перевести в пассивное состояние методом Slеер. Пассивный поток также считается заблокированным. Разумеется, с переводом потока в пассивное состояние на долю ос...
Завершение или прерывание программных потоков
Поток автоматически завершается при выходе из метода, указанного при создании делегата ThreadStart, но иногда требуется завершить метод (следовательно, и поток) при возникновении определенных факт...
Приостановка и уничтожение потоков
Пространство имен Threading содержит и другие методы, прерывающие нормальное функционирование потоков:Suspend;Abort.Трудно сказать, зачем в .NET была включена поддержка этих методов — при вызове...
Фоновые потоки (демоны)
Некоторые потоки, работающие в фоновом режиме, автоматически прекращают работу в тот момент, когда останавливаются другие компоненты программы. В частности, сборщик мусора работает в одном из фоно...
Более серьезный пример: извлечение данных из кода HTML
Мы рекомендуем использовать потоки лишь в том случае, когда функциональность программы четко делится на несколько операций. Хорошим примером является программа извлечения данных из кода HTML из гл...
Главная опасность (общие данные)
До настоящего момента рассматривался единственный безопасный случай использования потоков — наши потоки не изменяли общих данных. Если разрешить изменение общих данных, потенциальные ошибки начин...
Проблемы многопоточности
В процедуре Sub Main (строки 4-7) создается «дом» с десятью «комнатами». Класс House устанавливает максимальную температуру 75 градусов по Фаренгейту (около 24 градусов по Цельсию). В строках 13-2...
Решение проблемы: синхронизация
В предыдущей программе возникает ситуация, когда результат работы программы зависит от порядка выполнения потоков. Чтобы избавиться от нее, необходимо убедиться в том, что команды типаIf mHouse.H...
Команда SyncLock и класс Monitor
Использование команды SyncLock связано с некоторыми тонкостями, не проявившимися в приведенных выше простых примерах. Так, очень важную роль играет выбор объекта синхронизации. Попробуйте запустит...
Взаимная блокировка
В процессе синхронизации блокировка устанавливается для объектов, а не потоков, поэтому при использовании разных объектов для блокировки разных фрагментов кода в программах иногда возникают весьм...
Анализ взаимной блокировки в окне потоков
Следовательно, если убрать вызов Rnd в строке 98 и заменить его фрагментомmFork.GrabFork(Me)mKnife.GrabKnife(Me)взаимная блокировка исчезает!...
Совместная работа с данными по мере их создания
В многопоточных приложениях часто встречается ситуация, когда потоки не только работают с общими данными, но и ожидают их появления (то есть поток 1 должен создать данные, прежде чем поток 2 смож...
Многопоточность в графических программах
Наше обсуждение многопоточности в приложениях с графическим интерфейсом начнется с примера, поясняющего, для чего нужна многопоточность в графических приложениях. Создайте форму с двумя кнопками...
Многопоточность в простом приложении с графическим интерфейсом
Imports System.TextPublic Class RandomCharactersPrivate m_Data As StringBuilderPrivate m_CountDone As BooleanPrivate mjength, m_count As IntegerPublic Sub New(ByVal n As Integer)m_Length = n -1m_D...
Menu_gl10
Глава 10. Многопоточные приложения Знакомство с многопоточностью Домены приложений Создание потоков Метод Join Имена потоков, CurrentThread и ThreadState Окно потоков Приостановка потока За...








Начало