МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Інститут комп’ютерних наук та інформаційних технологій
Кафедра програмного забезпечення
ЗВІТ
До лабораторної роботи № 3
На тему: “Побудова програм потоків за допомогою стандартних бібліотек C#.”
З дисципліни : "Програмне забезпечення мережевих технологій "
Лектор:
Проф. каф. ПЗ
Мельник Р.А.
Львів – 2009
Лабораторна робота №3
Тема: побудова програм потоків за допомогою стандартних бібліотек C#.
Мета: освоїти елементи програмування мовою C#, а також засвоїти класи і методи графічної бібліотеки awt (swing).Створити багато потокову програму з допомогою стандартних бібліотек.
Завдання до лабораторної роботи
2.Створити C# потоки кульк.
Хід роботи
Сучасні операційні системи підтримують багатопотоковий режим, в якому програміст в межах кожного процесу може створювати декілька підпроцесів або потоків. Потоки відрізняються від процесів. В системі з малою кількістю потоків є самостійні процеси і зв’язані процеси, які спільно використовують програми опрацювання відкритих файлів. В багатопотоковій системі кожен процес складається з одного чи більше (до n) потоків, і всі вони спільно використовують як глобальні змінні, так і програми опрацювання відкритих файлів. Таке розділення глобальних змінних спрощує для потоків спільне використання ресурсів при одночасному виконанні поставлених їм задач.
Код програми
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace Laba_33
{
public partial class Form1 : Form
{
public int k2 = 1, k1 = 1;
private Thread Thread2;
private Thread Thread1;
public Form1()
{
InitializeComponent();
Thread1 = new Thread(delegate()
{
Graphics gr;
int x = 0;
int y = 0;
gr = Graphics.FromHwnd(pictureBox1.Handle);
while (true)
{
pictureBox1.Height = 400;
pictureBox1.Width = 400;
gr.FillEllipse(new SolidBrush(pictureBox1.BackColor), x, y, 50, 50);
if (k1 == 1) { x += 14; y += 7; }
if (y <= 0 && x <= 400 - 54) k1 = 4;
if (x <= 0 && y <= 400 - 54) k1 = 3;
if (x >= 400 - 54 && y <= 400 - 54) { k1 = 5; }
if (x <= 400 - 54 && y >= 400 - 54) { k1 = 6; }
if (x >= 400 - 54) k1 = 2;
if (y >= 400 - 54) k1 = 2;
if (k1 == 2) { x -= 7; y -= 14; }
if (k1 == 5) { x += 7; y -= 14; }
if (k1 == 6) { y += 14; x -= 7; }
if (k1 == 3) { x += 14; y -= 7; }
if (k1 == 4) { y += 14; x -= 7; }
gr.FillEllipse(new SolidBrush(Color.DarkGreen), x, y, 50, 50);
Thread.Sleep(100);
}
});
Thread2 = new Thread(delegate()
{
pictureBox1.Height = 400;
pictureBox1.Width = 400;
Graphics gr;
int x2 = 200;
int y2 = 200;
gr = Graphics.FromHwnd(pictureBox1.Handle);
while (true)
{
gr.FillEllipse(new SolidBrush(pictureBox1.BackColor), x2, y2, 50, 50);
if (k2 == 1) { x2 += 10; y2 += 5; }
if (y2 <= 0 && x2 <= 400 - 53) k2 = 4;
if (x2 <= 0 && y2 <= 400 - 53) k2 = 3;
if (x2 >= 400 - 53 && y2 <= 400 - 53) { k2 = 5; }
if (x2 <= 400 - 53 && y2 >= 400 - 53) { k2 = 6; }
if (x2 >= 400 - 53) k2 = 2;
if (y2 >= 400 - 53) k2 = 2;
if (k2 == 2) { x2 -= 5; y2 -= 5; }
if (k2 == 5) { x2 += 5; y2 -= 10; }
if (k2 == 6) { y2 += 10; x2 -= 5; }
if (k2 == 3) { x2 += 10; y2 -= 5; }
if (k2 == 4) { y2 += 10; x2 -= 5; }
gr.FillEllipse(new SolidBrush(Color.DarkBlue), x2, y2, 50, 50);
Thread.Sleep(100);
}
});
CheckForIllegalCrossThreadCalls = false;
}
void StartThread(Thread t2)
{
if (t2.ThreadState == ThreadState.Unstarted)
{ t2.Start(); }
}
public int i = 0;
public int k = 0;
void SuspendThread(Thread t3)
{
t3.Suspend();
}
void ResumeThread(Thread t3)
{
t3.Resume();
}
private void button1_Click_1(object sender, EventArgs e)
{
StartThread(Thread1);
}
private void button2_Click(object sender, EventArgs e)
{
SuspendThread(Thread1);
}
private void button3_Click(object sender, EventArgs e)
{ if (Thread1.ThreadState == ThreadState.Suspended)
Thread1.Resume();
}
private void button4_Click(object sender, EventArgs e)
{
StartThread(Thread2);
}
private void button5_Click(object sender, EventArgs e)
{
SuspendThread(Thread2);
}
private void button6_Click(object sender, EventArgs e)
{
if (Thread2.ThreadState == ThreadState.Suspended)
Thread2.Resume();
}
}
}
Протокол роботи програми
Висновок:
Я освоїв елементи програмування мовою C#, а також засвоїти основні особливості створення потоків з допомогою стандартної бібліотеки.
Мною було розроблено C# програму, що створює два різних потоки і в кожному з них виводить певну стрічку.