[ Foro de C# ]

interupcion colas en c#

06-Sep-2023 21:50
Invitado ( colas en c#)
0 Respuestas

Las personas que traen cartuchos vacíos, en cambio, van al sector de servicio técnico. Allí dejan el
cartucho, y se les otorga un remito, con la fecha en la que deben retirar el cartucho. Esto demora 4
minutos, pero si el técnico está hablando por teléfono, la persona debe esperar a que la llamada
termine. Hay llamadas cada 10 minutos, y tienen una duración de 3 minutos
private double ActulizarLlegadaLlamada()
       {
           if (tiempo == 0)
           {
               double proxima_llegada = 10;
               proxima_llegada_llamada = tiempo + proxima_llegada;

               return proxima_llegada;
           }
           //Se activa cuando llega una llamada calcula la proxima llegada
           if (proxima_llegada_llamada == tiempo)
           {
               double proxima_llegada = 10;
               idsCliente++;
               var cliente = new Clientes();
               cliente.id = idsCliente + 1;
               cliente.tiempo_llegada = tiempo;
               proxima_llegada_llamada = tiempo + proxima_llegada;
               if (tecnico_1)
               {
                   cliente.estado = " SA1 ";
                   clientes_llamada.Add(cliente);
                   nombre_de_evento += cliente.id.ToString() + " SA1 ";

                   return proxima_llegada;
               }
             
               if (!tecnico_1 && fin_atencion_cartucho1>0)
               {

                   cliente.estado = " SA ";
                   nombre_de_evento += cliente.id.ToString() + " SA ";
                   clientes_llamada.Add(cliente);
                   return proxima_llegada;
               }
               if(!tecnico_1 && fin_atencion_cartucho1 == 0)
               {
                   cliente.estado = " EA ";
                   clientes_llamada.Add(cliente);
                   nombre_de_evento += cliente.id.ToString() + " EA ";
                 
               }

               


           }
           return 0;


       }
private double ActualizarLleagadaCartucho()
       {
           if (tiempo == 0)
           {
              double proxima_llegada = GenerarRandomsPoisson() +0.02;
             //  double proxima_llegada = 1000;
               proxima_llegada_cartucho = tiempo + proxima_llegada;

               return proxima_llegada;
           }
           //Se activa cuando llega un cartucho y calcula la proxima llegada
           if (proxima_llegada_cartucho == tiempo)
           {
               double proxima_llegada = GenerarRandomsPoisson() + 0.02;
               //double proxima_llegada = 1000;
               idsCliente++;
               var cliente = new Clientes();
               cliente.id = idsCliente + 1;
               cliente.tiempo_llegada = tiempo;
               proxima_llegada_cartucho = tiempo + proxima_llegada;

               if (tecnico_1)
               {
                   cliente.estado = " SA ";
                   clientes_cartucho.Add(cliente);
                   nombre_de_evento += cliente.id.ToString() + " SA ";

                   return proxima_llegada;
               }
               if(!tecnico_1)
               {
                   cliente.estado = " EA ";
                   cola_tecnico.Add(cliente);
                   nombre_de_evento += cliente.id.ToString() + " EA ";
                   return proxima_llegada;
               }
           }
           return 0;


       }

private double ActualizarTiempoAtencionCartucho(double llegada_anterior)
       {
           if (tecnico_1 && llegada_anterior == tiempo)
           {
             
                   tecnico_1 = false;
                   double proxima_fin = 4;
                   fin_atencion_cartucho1 = tiempo + proxima_fin;
                   return proxima_fin;
               
           }

           if (fin_atencion_cartucho1 == tiempo )
           {
               for (var i = 0; i < clientes_cartucho.Count(); i++)
               {
                   if (clientes_cartucho.Count() == i + 1)
                   {
                       double demora_cliente = tiempo - clientes_cartucho[i].tiempo_llegada;
                       if (demora_cliente > tiempo_demora_maxima)
                       {
                           tiempo_demora_maxima = demora_cliente; // Actualiza el tiempo de demora máximo
                       }
                       clientes_cartucho[i].estado = "Destruido";
                       nombre_de_evento += clientes_cartucho[i].id.ToString() + " D ";



                       if (cola_tecnico.Count() == 0)
                       {
                           tecnico_1 = true;
                           fin_atencion_cartucho1 = 0;


                       }
                       else
                       {
                           double proxima_fin = 4;

                           fin_atencion_cartucho1 = tiempo + proxima_fin;
                           
                           clientes_cartucho.Add(cola_tecnico[0]);
                           clientes_cartucho[i + 1].estado = " SA1 ";
                           cola_tecnico.Remove(clientes_cartucho[i + 1]);
                           nombre_de_evento += " -c: " + clientes_cartucho[i + 1].id.ToString() + " SA1 ";
                           return proxima_fin;
                       }
                   }

               }
           }
               return 0;
       }



       private double ActualizarTiempoAtencionLlamada(double llegada_anterior)
       {
           if (tecnico_1 && llegada_anterior == tiempo )
           {
               tecnico_1 = false;
               double proxima_fin = 3; // Cambiar los parámetros según la distribución deseada
               fin_atencion_llamada1 = tiempo + proxima_fin;
               return proxima_fin;
           }

           if (llegada_anterior == tiempo && fin_atencion_cartucho1 > 0)
           {
               tiempo_remanente_cartucho = fin_atencion_cartucho1 - tiempo;
               fin_atencion_cartucho1 = 0;
               double proxima_fin = 3;
               fin_atencion_llamada1 = tiempo + proxima_fin;
               
               nombre_de_evento += " -c: " + clientes_cartucho[clientes_cartucho.Count() - 1].id.ToString() + " ER ";

               

               return proxima_fin;
               // Update other necessary variables
           }      

           if (fin_atencion_llamada1 == tiempo)

           {
               
               for (var i = 0; i < clientes_llamada.Count(); i++)
               {
                   double demora_cliente = tiempo - clientes_llamada[i].tiempo_llegada;
                   if (demora_cliente > tiempo_demora_maxima)
                   {
                       tiempo_demora_maxima = demora_cliente; // Actualiza el tiempo de demora máximo
                   }

                   clientes_llamada[i].estado = "Destruido";
                   nombre_de_evento += clientes_llamada[i].id.ToString() + " D ";
                   
                   if (cola_tecnico.Count() == 0)
                   {
                       tecnico_1 = true;
                       fin_atencion_llamada1 = 0;
                       fin_atencion_cartucho1 = tiempo + tiempo_remanente_cartucho;
                       tiempo_remanente_cartucho = 0;



                   }

                   else
                   {

                       double proxima_fin = 3;
                       fin_atencion_llamada1 = tiempo + proxima_fin;

                       clientes_llamada.Add(cola_tecnico[0]);
                       clientes_llamada[i + 1].estado = "SA1";
                       cola_tecnico.Remove(clientes_llamada[i+ 1]);
                       nombre_de_evento += " -c:" + clientes_llamada[i + 1].id.ToString() + " SA1";
                       

                       return proxima_fin;

                   }
               
               

               }
           }

           return 0;
       }




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)