logo search
2010_150 Акчурин - Программирование на языке C#

18.Многопоточные приложения

Предмет исследований

Контрольные вопросы

  1. Типы многопоточности в программах.

  2. Создание дополнительных потоков в программах.

  3. Обмен данными между потоками.

  4. Применение делегатов при создание многопоточных приложений в C#/

  5. Преимущества многопоточных приложений на современных ПК.

  6. Использование метода "Thread.Sleep".

Задание. Напишите программу реализующую создание второго потока при ее запуске и обмен данными между потоками.

Пример. В примере показана программ в которой из основного потока создается еще один поток. Второй поток исполняется до того момента пока в первом переменной str не будет присвоено значение x. После этого глобальная переменная stopThread примет значение true и цикл во втором потоке завершится, что привет к завершения работы самого потока. В данном примере представлен обмен данными между потоками с помощью глобальных переменных.

Листинг программы

using System;

using System.Threading;

namespace LabTh

{

class Program

{

static bool stopThread;

public static void MyThread()

{

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

{

if (stopThread)

break;

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

Thread.Sleep(2000);

}

Console.WriteLine("Поток MyThread остановлен");

}

[STAThread]

static void Main(string[] args)

{

ThreadStart myThreadDelegate = new ThreadStart(MyThread);

Thread thr = new Thread(myThreadDelegate);

Console.WriteLine("Запуск потока MyThread");

stopThread = false;

thr.Start();

string str;

do

{

Console.WriteLine("Команда (х -- выход): ");

str = Console.ReadLine();

Console.WriteLine("основной поток: {0}", str);

}

while (str != "x");

stopThread = true;

Console.ReadLine();

}

}

}

При работе программы видно, что при присвоении заданной переменной значения "x" происходит прекращение работы потока.