Exemplo n.º 1
0
        /* Cua concurrent
         *              Dos mètodes bàsics:
         *                      Cua.Enqueue per afegir a la cua
         *                      bool success = Cua.TryDequeue(out clientActual) per extreure de la cua i posar a clientActual
         */

        #endregion

        public static void Main(string[] args)
        {
            var clock   = new Stopwatch();
            var threads = new List <Thread>();
            //Recordeu-vos que el fitxer CSV ha d'estar a la carpeta bin/debug de la solució
            const string fitxer = "CuaClients.csv";

            try
            {
                var reader = new StreamReader(File.OpenRead(@fitxer));


                //Carreguem la llista clients

                while (!reader.EndOfStream)
                {
                    var line      = reader.ReadLine();
                    var values    = line.Split(';');
                    var newClient = new Client()
                    {
                        name = values[0], articles = Int32.Parse(values[1])
                    };
                    cua.Enqueue(newClient);
                }
            }
            catch (Exception)
            {
                //En cas de que falli l'arxiu CSV entrarà al catch i mostrarà aquest missatge d'error.
                Console.WriteLine("Error accedint a l'arxiu");
                Console.ReadKey();
                Environment.Exit(0);
            }

            //Comença el temporitzador.
            clock.Start();



            // Instanciar les caixeres i afegir el thread creat a la llista de threads
            for (int i = 1; i <= maxCax; i++)
            {
                var cax = new Caixera()
                {
                    idCax = i
                };
                var fil = new Thread(() => cax.cua());
                //operadors lambda
                fil.Start();
                threads.Add(fil);
            }


            // Procediment per esperar que acabin tots els threads abans d'acabar
            foreach (Thread thread in threads)
            {
                thread.Join();
            }

            // Parem el rellotge i mostrem el temps que triga
            clock.Stop();
            double temps = clock.ElapsedMilliseconds / 1000;

            Console.Clear();
            Console.WriteLine("Temps total Task: " + temps + " segons");
            Console.ReadKey();
        }