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.
82 lines
2.9 KiB
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();
|
|
}
|
|
}
|
|
}
|