Specifikace funkce vykonavane vlaknem a zakladni operace na vlakny
Tento příklad demonstruje použití několika operací s vlákny, včetně Start, Join, Sleep, Interrupt, a dalších.
using System;
using System.Threading;
class Program
{
static void Main()
{
// Vytvoření vlákna s metodou bez parametrů
Thread vlakno1 = new Thread(PraceVlaken);
// Vytvoření vlákna s metodou s parametrem
Thread vlakno2 = new Thread(new ParameterizedThreadStart(PraceVlakenSParametrem));
// Nastavení priority vlákna
vlakno1.Priority = ThreadPriority.Highest;
vlakno2.Priority = ThreadPriority.Lowest;
// Spuštění vláken
vlakno1.Start(); // Spustí vlakno1
vlakno2.Start(5000); // Spustí vlakno2 a předá parametr
// Pozastavení hlavního vlákna na 2 sekundy
Thread.Sleep(2000);
Console.WriteLine("Hlavní vlákno čeká, dokud se vlakno1 nedokončí.");
// Čekání na dokončení vlakno1
vlakno1.Join();
// Kontrola, zda je vlakno2 stále aktivní
if (vlakno2.IsAlive)
{
Console.WriteLine("Vlakno2 stále běží, přerušení vlákna...");
vlakno2.Interrupt(); // Přeruší vlakno2, pokud je ve stavu čekání
}
// Čekání na dokončení vlakno2
vlakno2.Join();
Console.WriteLine("Všechna vlákna dokončena.");
}
static void PraceVlaken()
{
Console.WriteLine("Vlákno 1 začalo pracovat.");
try
{
// Simulace práce vlákna
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"Vlákno 1 běží: Iterace {i + 1}");
Thread.Sleep(500); // Pozastavení vlákna na 0,5 sekundy
}
}
catch (ThreadInterruptedException)
{
Console.WriteLine("Vlákno 1 bylo přerušeno.");
}
Console.WriteLine("Vlákno 1 dokončeno.");
}
static void PraceVlakenSParametrem(object delay)
{
Console.WriteLine("Vlákno 2 začalo pracovat.");
try
{
// Pozastavení vlákna o dobu zadanou v parametru
Thread.Sleep((int)delay);
Console.WriteLine("Vlákno 2 dokončeno po zpoždění.");
}
catch (ThreadInterruptedException)
{
Console.WriteLine("Vlákno 2 bylo přerušeno.");
}
}
}
Co Dělá Tento Kód:
- Vytváření Vláken: Dvě vlákna jsou vytvořena, jedno bez parametrů (
vlakno1) a jedno s parametrem (vlakno2). - Nastavení Priority:
vlakno1má nejvyšší prioritu, zatímcovlakno2má nejnižší prioritu. - Start: Obě vlákna jsou spuštěna, přičemž
vlakno2dostane parametr zpoždění. - Sleep a Join: Hlavní vlákno čeká (
Sleep) a poté čeká (Join), dokud sevlakno1nedokončí. - Kontrola Stavu a Přerušení: Pokud je
vlakno2stále běžící (IsAlive), je přerušeno (Interrupt). - Zpracování Přerušení: Obě vlákna mají
try-catchblok pro zpracování výjimkyThreadInterruptedException.
Výstup:
Tento program demonstruje různé stavy vláken, jejich spuštění, zpracování přerušení a synchronizaci s hlavním vláknem.