You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mchsamples-.net-core/ex_050_002_attendre_un_thread/Program.cs

82 lines
2.9 KiB

using System;
using System.Threading;
namespace ex_050_002_attendre_un_thread
{
class Program
{
static Thread petitThread;
static Thread petitThread2;
static void Main(string[] args)
{
Console.WriteLine("\"petit thread\" joue un son pendant 2 secondes,");
Console.WriteLine("\tpuis attend la fin de \"petit thread 2\",");
Console.WriteLine("\tpuis affiche PETIT THREAD");
Console.WriteLine("\"petit thread 2\" joue un son pendant 3 secondes,");
Console.WriteLine("\tpuis affiche PETIT THREAD 2");
Console.WriteLine("le thread principal lance les deux petits threads,");
Console.WriteLine("\taffiche leur état,");
Console.WriteLine("\tpuis attend 2,5 secondes");
Console.WriteLine("\taffiche leur état,");
Console.WriteLine("\tpuis attend les deux petits threads");
Console.WriteLine("\tet affiche une dernière fois leur état,");
//crée deux threads
petitThread = new Thread(Wait2000);
petitThread2 = new Thread(Wait3000);
//donner un nom au thread est optionnel mais peut faciliter le débogage
petitThread.Name = "petit thread";
petitThread2.Name = "petit thread 2";
PrintThreadsState(petitThread, petitThread2);
Console.WriteLine("\"petit thread\" et \"petit thread 2\" démarrent");
//lance les threads
petitThread.Start();
petitThread2.Start();
//le code suivant s'exécute en parallèle de Write0
PrintThreadsState(petitThread, petitThread2);
Thread.Sleep(2500);
Console.WriteLine("2,5 secondes se sont écoulées.");
Console.WriteLine("\"petit thread\" est en attente, état : WaitSleepJoin");
Console.WriteLine("\"petit thread 2\" est en cours d'exécution, état : Running");
PrintThreadsState(petitThread, petitThread2);
petitThread.Join();
petitThread2.Join();
PrintThreadsState(petitThread, petitThread2);
}
//méthode qui va être exécutée en parallèle
static void Wait2000()
{
Console.Beep(26000, 2000);
petitThread2.Join();
Console.WriteLine("PETIT THREAD");
}
//méthode qui va être exécutée en parallèle
static void Wait3000()
{
Console.Beep(26000, 3000);
Console.WriteLine("PETIT THREAD 2");
}
static void PrintThreadsState(params Thread[] threads)
{
Console.WriteLine();
Console.WriteLine("état des threads:");
foreach (Thread thread in threads)
{
Console.WriteLine("\t{0} : {1}", thread.Name, thread.ThreadState);
}
Console.WriteLine();
}
}
}