русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Запуск потока


Дата добавления: 2015-01-16; просмотров: 614; Нарушение авторских прав


Создания объекта, задающего поток, еще не достаточно, чтобы поток начал выполняться. Для запуска потока на выполнение необходимо вызвать метод Start в форме my_thread.Start(), либо в форме my_thread.Start(my_object), если методуmy_method необходимо передать информацию. Заметьте, фактический аргумент my_object, передаваемый методу, исполняемому потоком, передается не в момент создания потока, а в момент его запуска на выполнение. Другая ситуация имеет место, когда потоку передается анонимный метод. Как показано в предыдущем примере, анонимный метод вызывает метод Info, передавая ему фактические параметры.

Следует понимать, что вызов метода Start не означает, что запущенный метод my_method непосредственно начнет выполняться. Вызов метода Start является указанием операционной системе на перевод потока my_thread из состояния "создание" в состояние "готовность", так что поток станет в очередь на выполнение. Если потоку повезет, и в момент запуска он окажется первым в очереди и найдется свободный процессор, то метод начнет непосредственно выполняться, иначе он будет ждать, пока до него не дойдет очередь.

Когда запущенный на выполнение метод my_method завершает свою работу, то заканчивает свою жизнь и соответствующий поток, для него нельзя повторно вызвать метод Start. для повторного запуска метода нужно создать новый поток. "Мавр сделал свое дело, - мавр должен уйти".

..Состояние "ожидание"

Выполняемый поток операционная система периодически может переводить в состояние "ожидание", предоставляя процессор другим потокам. Но поток сам может потребовать перевода его в это состояние. Причины для этого могут быть разные, - чаще всего это делается в интересах синхронизации совместной работы потоков. Рассмотрим два метода класса Thread, используемые для этих целей. Статический метод Sleep позволяет потоку "уснуть" на некоторое время. У этого метода две перегруженные реализации, - обе с одним аргументом - dt. Если задать аргумент dt типа int, то поток засыпает на dt миллисекунд, после чего готов выполнять свою работу. Часто задается значение этого аргумента, равное нулю. В этом случае поток добровольно позволяет другим потокам выполнять свою работу, а сам становится в конец очереди, - пример бескорыстия ради общих интересов. Аргумент dt может быть объектом класса TimeSpan. У этого класса несколько конструкторов. Если вызвать конструктор с одним аргументом, то время сна будет задаваться в тиках, если задавать три аргумента, то можно время можно задать в часах, минутах, секундах; четыре аргумента позволяют задавать и миллисекунды.



Возможным значением аргумента dt является и константа класса Timeout - Infinity, когда поток засыпает на неопределенно долгое время.

Другим методом, прерывающим работу потока, является метод Join. Представьте, что основной поток создал поток my_thread, запустил его на выполнение, и сам продолжает выполняться. В какой-то момент времени основному потоку могут понадобиться результаты работы запущенного им потока my_thread, но ему неизвестно, закончил ли свою работу дочерний поток. В этом случае в основном потоке осуществляется вызов my_thread.Join. Вызывающий поток приостанавливается, пока не произойдет событие - дочерний поток завершил работу. Остановки не будет, если в момент выполнения Join дочерний поток уже завершил свою работу.

Нетерпеливый поток может вызывать метод Join не как процедуру, а как булевскую функцию с одним аргументом dt, задающим время, в течение которого вызывающий поток ждет завершения работы дочернего потока. Если в указанное время дочерний поток завершается, то функция возвращает значение true, иначе - false.

#######################################################################################

 



<== предыдущая лекция | следующая лекция ==>
Объявление объектов класса Thread | Метакомпьютер и метакомпьютинг. Отличительные свойства метакомпьютеров. 17


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.116 сек.