Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

Console.WriteLine("Установка имени и приоритета.\п");

Thrd.Name = "Основной Поток";

Thrd. Priority = ThreadPriority. AboveNormal^-

Console. WriteLine ("Теперь основной поток называется: " +

Thrd.Name);

Console.WriteLine("Теперь приоритет: " + Thrd.Priority);

}

}

Ниже приведен результат выполнения этой программы.

У основного потока нет имени.

Приоритет: Normal

Установка имени и приоритета.

Теперь

основной поток называется: Основной Поток Теперь приоритет: AboveNormal

Следует, однако, быть очень внимательным, выполняя операции с основным потоком. Так, если добавить в конце метода Main следующий вызов метода Join :

Thrd.Join ;

программа никогда не завершится, поскольку она будет ожидать окончания основного потока!

Дополнительные средства многопоточной обработки, внедренные в версии .NET Framework 4.0

В версии .NET Framework 4.0 внедрен ряд новых средств многопоточной обработки, которые могут оказаться весьма полезными. Самым важным среди них является новая система отмены. В этой системе поддерживается механизм отмены потока простым, вполне определенным и структурированным способом. В основу этого механизма положено понятие признака отмены, с помощью которого указывается состояние отмены потока. Признаки отмены поддерживаются в классе CancellationTokenSource и в структуре CancellationToken. Система отмены полностью интегрирована в новую библиотеку распараллеливания задач (TPL), и поэтому она подробнее рассматривается вместе с TPL в главе 24.

В класс System. Threading добавлена структура SpinWait, предоставляющая методы SpinOnce () и SpinUntil , которые обеспечивают более полный контроль над ожиданием в состоянии занятости. Вообще говоря, структура SpinWait оказывается непригодной для однопроцессорных систем. А для многопроцессорных систем она применяется в цикле. Еще одним элементом, связанным с ожиданием в состоянии занятости, является структура SpinLock, которая применяется в цикле ожидания до тех пор, пока не станет доступной блокировка. В класс Thread добавлен метод Yield , который просто выдает остаток кванта времени, выделенного потоку. Ниже приведена общая форма объявления этого метода.

public static bool Yield

Этот метод возвращает логическое значение true, если происходит переключение контекста. В отсутствие другого потока, готового для выполнения, переключение контекста не произойдет.

Рекомендации по многопоточному программированию

Для эффективного многопоточного программирования самое главное — мыслить категориями параллельного, а не последовательного выполнения кода. Так, если в одной программе имеются две подсистемы, которые могут работать параллельно, их следует организовать в отдельные потоки. Но делать это следует очень внимательно и аккуратно, поскольку если создать слишком много потоков, то тем самым можно значительно снизить,.а

не повысить производительность программы. Следует также иметь в виду дополнительные издержки, связанные с переключением контекста. Так, если создать слишком много потоков, то на смену контекста уйдет больше времени
ЦП, чем на выполнение самой программы! И наконец, для написания нового кода, предназначенного для многопоточной обработки, рекомендуется пользоваться библиотекой распараллеливания задач (TPL), о которой речь пойдет в следующей главе.

Запуск отдельной задачи

Многозадачность на основе потоков чаще всего организуется при программировании на С#. Но там, где это уместно, можно организовать и многозадачность на основе процессов. В этом случае вместо запуска другого потока в одной и той же программе одна программа начинает выполнение другой. При программировании на C# это делается с помощью класса Process, определенного в пространстве имен System. Diagnostics. В заключение этой главы вкратце будут рассмотрены особенности запуска и управления другим процессом.

Простейший способ запустить другой процесс — воспользоваться методом Start , определенным в классе Process. Ниже приведена одна из самых простых форм этого метода:

public static Process Start(string имя_файла)

где имя_файла обозначает конкретное имя файла, который должен исполняться или же связан с исполняемым файлом.

Когда созданный процесс завершается, следует вызвать метод Close , чтобы освободить память, выделенную для этого процесса. Ниже приведена форма объявления метода Close .

public void Close

Процесс может быть прерван двумя способами. Если процесс является приложением Windows с графическим пользовательским интерфейсом, то для прерывания такого процесса вызывается метод CloseMainWindow , форма которого приведена ниже.

public bool CloseMainWindow

Этот метод посылает процессу сообщение, предписывающее ему остановиться. Он возвращает логическое значение true, если сообщение получено, и логическое значение false, если приложение не имеет графического пользовательского интерфейса или главного окна. Следует, однако, иметь в виду, что метод CloseMainWindow служит только для запроса остановки процесса. Если приложение проигнорирует такой запрос, то оно не будет прервано как процесс.

Для безусловного прерывания процесса следует вызвать метод Kill , как показано ниже.

public void Kill

Но методом Kill следует пользоваться аккуратно, так как он приводит к неконтролируемому прерыванию процесса. Любые несохраненные данные, связанные с прерываемым процессом, будут, скорее всего, потеряны.

Для того чтобы организовать ожидание завершения процесса, можно воспользоваться методом WaitForExit . Ниже приведены две его формы.

Поделиться:
Популярные книги

Невеста инопланетянина

Дроздов Анатолий Федорович
2. Зубных дел мастер
Фантастика:
космическая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Невеста инопланетянина

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Облачный полк

Эдуард Веркин
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Облачный полк

Хозяйка усадьбы, или Графиня поневоле

Рамис Кира
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Хозяйка усадьбы, или Графиня поневоле

Наследник павшего дома. Том II

Вайс Александр
2. Расколотый мир [Вайс]
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том II

Я уже князь. Книга XIX

Дрейк Сириус
19. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я уже князь. Книга XIX

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Небо для Беса

Рам Янка
3. Самбисты
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Небо для Беса

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Девочка-яд

Коэн Даша
2. Молодые, горячие, влюбленные
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-яд

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

Барону наплевать на правила

Ренгач Евгений
7. Закон сильного
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Барону наплевать на правила

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров

Двойник Короля 2

Скабер Артемий
2. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля 2