Иллюстрированный самоучитель по Visual Basic .NET

Метод Join. Имена потоков, CurrentThread и ThreadState.

Иногда программный поток требуется приостановить до момента завершения другого потока. Допустим, вы хотите приостановить поток 1 до тех пор, пока поток 2 не завершит свои вычисления. Для этого из потока 1 вызывается метод Join для потока 2. Иначе говоря, команда:

thread2.Join()

Приостанавливает текущий поток и ожидает завершения потока 2. Поток 1 переходит в заблокированное состояние.

Если присоединить поток 1 к потоку 2 методом Join, операционная система автоматически запустит поток 1 после завершения потока 2. Учтите, что процесс запуска является недетерминированным: нельзя точно сказать, через какой промежуток времени после завершения потока 2 заработает поток 1. Существует и другая версия Join, которая возвращает логическую величину:

thread2.Join(Integer)

Этот метод либо ожидает завершения потока 2, либо разблокирует поток 1 после истечения заданного интервала времени, вследствие чего планировщик операционной системы снова будет выделять потоку процессорное время. Метод возвращает True, если поток 2 завершается до истечения заданного интервала тайм-аута, и False в противном случае.

Примечание
Не забывайте основное правило: независимо оттого, завершился ли поток 2 или про-изошел тайм-аут, вы не можете управлять моментом активизации потока 1
.

Имена потоков, CurrentThread и ThreadState

Перед запуском каждому потоку рекомендуется присвоить содержательное имя, поскольку имена значительно упрощают отладку многопоточных программ. Для этого следует задать значение свойства Name командой следующего вида:

bThread.Name = "Subtracting thread"

Свойство Thread.CurrentThread возвращает ссылку на объект потока, выполняемого в настоящий момент.

Хотя для отладки многопоточных приложений в VB.NET существует замечательное окно потоков, о котором рассказано далее, нас очень часто выручала команда:

MsgBox(Thread.CurrentThread.Name)

Нередко выяснялось, что код выполняется совсем не в том потоке, в котором ему полагалось выполняться.

Напомним, что термин "недетерминированное планирование программных потоков" означает очень простую вещь: в распоряжении программиста практически нет средств, позволяющих влиять на работу планировщика. По этой причине в программах часто используется свойство ThreadState, возвращающее информацию о текущем состоянии потока.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.