Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Межпроцессорное взаимодействие и многопоточность в .NET (реферат).docx
Скачиваний:
30
Добавлен:
28.06.2014
Размер:
139.35 Кб
Скачать

Thread – составляющие

Примечание: в данном разделе рассмотрены наиболее важные члены класса Thread. (Более полную информацию можно найти в [3, 4, 6])

Свойства

 

Имя

Описание

CurrentThread

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

IsAlive

Возвращает true, если поток стартовал и еще не завершил свою работу. Иначе возвращает false.

IsBackground

Возвращает или задает значение, показывающее, является ли поток фоновым (подробности в примере №3 данного раздела).

Name

Возвращает или задает имя потока.

Priority

Возвращает или задает значение, указывающее на планируемый приоритет потока.

ThreadState

Возвращает значение, содержащее состояния текущего потока.

Определение:

[C#]

public static Thread CurrentThread {get;}

public bool IsAlive {get;}

public bool IsBackground {get; set;}

public string Name {get; set;}

public ThreadPriority Priority {get; set;}

public ThreadState ThreadState {get;}

Примеры:

1) В следующем примере кода показаны простейшие функциональные возможности работы с потоками.

using System;

using System.Threading;

//Запустим статический метод во втором потоке

public class ThreadExample

{

//Метод вызываеться когда поток стартует.

//Проходит десять итераций,пишет на консоль

//и выходит

public static void ThreadProc()

{

for (int i = 0; i < 10; i++)

{

Console.WriteLine("ThreadProc: {0}", i);

Thread.Sleep(0);

}

}

public static void Main()

{

Console.WriteLine("Main thread: Start a second thread.");

//Создаем новый поток. В качестве входного параметра

//передаем конструктору делегат на функцию

Thread t = new Thread(new ThreadStart(ThreadProc));

//Запускаем поток

t.Start();

//Thread.Sleep(0);

//Четыре итерации вывода на консоль

for (int i = 0; i < 4; i++)

{

Console.WriteLine("Main thread: Do some work.");

Thread.Sleep(0);

}

Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");

//Вызоваем join для того чтоподождать окончания работы ThreadProc

t.Join();

Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");

Console.ReadLine();

}

}

Выходная информация:

Этот код формирует выходные данные, подобные приведенным ниже:

Main thread: Start a second thread.

Main thread: Do some work.

ThreadProc: 0

Main thread: Do some work.

ThreadProc: 1

Main thread: Do some work.

ThreadProc: 2

Main thread: Do some work.

ThreadProc: 3

Main thread: Call Join(), to wait until ThreadProc ends.

ThreadProc: 4

ThreadProc: 5

ThreadProc: 6

ThreadProc: 7

ThreadProc: 8

ThreadProc: 9

Main thread: ThreadProc.Join has returned. Press Enter to end program.

2)Пример изменения и использования свойств Priotiry, Name, CurrentThread

using System;

using System.Threading;

class Test

{

static void Main()

{

PriorityTest priorityTest = new PriorityTest();

ThreadStart startDelegate =

new ThreadStart(priorityTest.ThreadMethod);

//Создаем потоки

Thread threadOne = new Thread(startDelegate);

threadOne.Name = "ThreadOne";

Thread threadTwo = new Thread(startDelegate);

threadTwo.Name = "ThreadTwo";

//Выставляем приоритет

threadTwo.Priority = ThreadPriority.BelowNormal;

//Запускаем потоки

threadOne.Start();

threadTwo.Start();

// Позвляем считать в течение 10 секунд

Thread.Sleep(10000);

priorityTest.LoopSwitch = false;

}

}

class PriorityTest

{

bool loopSwitch;

public PriorityTest()

{

loopSwitch = true;

}

public bool LoopSwitch

{

set { loopSwitch = value; }

}

public void ThreadMethod()

{

long threadCount = 0;

while (loopSwitch)

{

threadCount++;

}

//Вывод в консоль

Console.WriteLine("{0} with {1,11} priority " +

"has a count = {2,13}", Thread.CurrentThread.Name,

Thread.CurrentThread.Priority.ToString(),

threadCount.ToString("N0"));

}

}

Выходная информация:

ThreadTwo with BelowNormal priority has a count = 1 223 260 335

ThreadOne with Normal priority has a count = 1 293 215 035