- •Оглавление
- •Класс Thread. Общая информация.
- •Thread – составляющие
- •Свойства
- •1) В следующем примере кода показаны простейшие функциональные возможности работы с потоками.
- •2)Пример изменения и использования свойств Priotiry, Name, CurrentThread
- •3) Создание потоков в фоновом режиме. Использование свойства IsBackground.
- •4) Ключевое слово lock
- •Interrupt(), Sleep(), SpinWait(), Join()
- •Класс Process Общая информация.
- •Process – составляющие Свойства
- •Примеры:
- •Класс WaitHandle Общая информация.
- •WaitHandle – составляющие Поля
- •Свойства
- •Класс Mutex Общая информация.
- •Mutex – составляющие Свойства
- •Примеры
- •Класс AutoResetEvent Общая информация.
- •AutoResetEvent – составляющие Методы
- •Примеры
- •Класс ManualResetEvent Общая информация.
- •ManualResetEvent – составляющие Методы
- •Примеры
- •Класс Monitor Общая информация.
- •Monitor – составляющие Методы
- •Класс Semaphore
- •Список литературы
Interrupt(), Sleep(), SpinWait(), Join()
using System;
using System.Threading;
class ThreadInterrupt
{
static void Main()
{
StayAwake stayAwake = new StayAwake();
Thread newThread =
new Thread(new ThreadStart(stayAwake.ThreadMethod));
newThread.Start();
//Следующая строка сгенерит исключение в ThreadMethod
//если newThread блокирован или будет блокирован в будущем
newThread.Interrupt();
Console.WriteLine("Main thread calls Interrupt on newThread.");
//Говорим newThread спать
stayAwake.SleepSwitch = true;
//Ждем завершения newThread
newThread.Join();
}
}
class StayAwake
{
bool sleepSwitch = false;
public bool SleepSwitch
{
set { sleepSwitch = value; }
}
public StayAwake() { }
public void ThreadMethod()
{
Console.WriteLine("newThread is executing ThreadMethod.");
while (!sleepSwitch)
{
//Используем SpinWait для демонстрации эффекта
//вызова Interrupt в запущенном потоке
Thread.SpinWait(10000000);
}
try
{
Console.WriteLine("newThread going to sleep.");
//Когда newThread входит в слип, генерится исключение
// ThreadInterruptedException
Thread.Sleep(Timeout.Infinite);
}
catch (ThreadInterruptedException e)
{
Console.WriteLine("newThread cannot go to sleep - " +
"interrupted by main thread.");
}
}
}
Выходная информация:
Работа программы заканчивается исключением ThreadInterruptedException, когда поток выводиться из периода ожидания, так как производиться попытка вызвать поток метод sleep, после того как он был прерван методом interrupt.
Класс Process Общая информация.
Описание:
Позволяет проанализировать процессы, выполняющиеся на данной машине (локальной или удаленной). Предлагает члены, которые позволяют запускать и останавливать процессы программными средствами, устанавливать уровни приоритета и получать список активных потоков или загруженных модулей, выполняемых в рамках данного процесса.
(Process как объект ядра подробно описан в [8])
Иерархия:
System.Object System.MarshalByRefObject System.ComponentModel.Component System.Diagnostics.Process
Определение:
[C#]
public Process ()
Потокобезопасность:
Этот тип можно использовать в многопоточных операциях.
Process – составляющие Свойства
|
Name |
Description |
|
BasePriority |
Приоритет процесса |
|
ExitCode |
Устанавливается по завершению процесса |
|
ExitTime |
Время завершения процесса |
|
Handle |
Возвращает дескриптор процесса |
|
HandleCount |
Число дескрипторов открытых процессом |
|
Id |
Уникальный id процесса |
|
MachineName |
Имя ЭВМ |
|
MainModule |
Главный модуль процесса |
|
Modules |
Набор модулей запущенных в рамках данного процесса |
|
PriorityClass |
Позволяет изменить базовый приоритет процесса |
|
ProcessName |
Имя процесса |
|
StartTime |
Время начала работы данного процесса |
|
Threads |
Коллекция потока данного процесса |
Методы
|
Name |
Description |
|
GetCurrentProcess |
Получить текущий процесс |
|
GetProcesses |
Получает набор процессов запущенных на текущей машине |
|
GetProcessesByName |
Получает набор процессов запущенных на соответствующей ЭВМ |
|
Kill |
Останавливает процесс |
|
Start |
Начать выполнение процесса |