Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/05/2005, 17:47
hmartins
 
Fecha de Ingreso: mayo-2004
Mensajes: 95
Antigüedad: 20 años, 10 meses
Puntos: 0
Problema con proyecto de simulación - Problemas de Timers

El problema está en que la simulación de las llamadas funciona hasta cierto punto, luego de eso se tranca y no sé cómo puedo solventarla, pues ya he probado de todo. Funciona con 3 timers, uno que controla la entrada de una lista (de acuerdo a ciertos tiempos de entrada), otro que controla las salidas (de las mismas variables que entraron) en otros tiempos determinados y un tercer timer que controla el inicio y el final de los otros dos timers.

Código:
    
    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
        'Utilizamos una variable estática que almacenará
        'su valor cada vez que entremos en este evento
        Dim lineas, lineas_desocupadas, lineas_ocupadas As Integer
        Dim valor As Double
        'velocidad = 0
        valor = 0
        lineas = Txt_num_lineas.Text
        lineas_ocupadas = List_llamando.Items.Count
        Txt_lineas_desocupadas.Text = lineas - lineas_ocupadas
        Txt_ext_espera.Text = List_ext.Items.Count
        Timer_duracion.Enabled = True
        Timer_entrante.Enabled = True
        If Radio_lenta.Checked = True Then
            velocidad = 120
            valor = 0.83
        Else
            If Radio_rapida.Checked = True Then
                velocidad = 80
                valor = 1.25
            End If
        End If
        Static bteContador As Byte
        If bteContador = velocidad Then
            'Paramos el control Timer
            Timer.Stop()
            Timer_entrante.Stop()
            Timer_duracion.Stop()
            'Lo deshabilitamos para asegurarnos su parada
            Timer.Enabled = False
            Timer_entrante.Enabled = False
            Timer_duracion.Enabled = False
            MsgBox("Simulación terminada", MsgBoxStyle.Information, "Proyecto I")
            Progress_simulacion.Value = 0
        Else
            'Incrementamos en una unidad la variable estática
            bteContador = bteContador + 1
            Progress_simulacion.Value = bteContador * valor
        End If
    End Sub


    Private Sub Btn_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Start.Click
        If (Txt_num_lineas.Text = "") Or (Txt_num_lineas.Text <= 0) Then
            MsgBox("Debe introducir un número mayor a 0 (cero) en el campo Número de Líneas", MsgBoxStyle.Critical, "Proyecto I")
        End If
        If (Radio_lenta.Checked = False) And (Radio_rapida.Checked = False) Then
            MsgBox("Debe seleccionar una velocidad de simulación", MsgBoxStyle.Critical, "Proyecto I")
        End If
        Btn_Start.Enabled = False
        Timer.Enabled = True
        

    End Sub


    Private Sub Timer_duracion_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_duracion.Tick
        Static bteContador_duracion As Byte
        Dim ticker_duracion, bandera As Double
        Dim banderas As String
        If Radio_lenta.Checked = True Then
            velocidad = 80
        Else
            If Radio_rapida.Checked = True Then
                velocidad = 60
            End If
        End If
        If bteContador_duracion = velocidad Then
            'Paramos el control Timer
            'Timer_duracion.Stop()
            'Lo deshabilitamos para asegurarnos su parada
            'Timer_duracion.Enabled = False
        Else
            'Incrementamos en una unidad la variable estática
            ticker_duracion = bteContador_duracion * 4
            bandera = List_duracion_llamada.Items(0).Text
            If (List_duracion_llamada.Items(0).Text <= ticker_duracion) Then
                banderas = List_llamando.Items(0).Text
                List_llamando.Items.RemoveAt(0)
                List_duracion_llamada.Items.RemoveAt(0)
                Txt_lineas_ocupadas.Text = List_llamando.Items.Count()
                Txt_lineas_desocupadas.Text = Txt_num_lineas.Text - List_llamando.Items.Count()
                Txt_llamadas_done.Text = Txt_llamadas_done.Text + 1
            End If
            bteContador_duracion = bteContador_duracion + 1
        End If
    End Sub

    Private Sub Timer_entrante_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_entrante.Tick
        Static bteContador_entrante As Byte
        Dim ticker_entrante As Integer
        If Radio_lenta.Checked = True Then
            velocidad = 80
        Else
            If Radio_rapida.Checked = True Then
                velocidad = 60
            End If
        End If
        If bteContador_entrante = velocidad Then
            'Paramos el control Timer
            'Timer_entrante.Stop()
            'Lo deshabilitamos para asegurarnos su parada
            'Timer_entrante.Enabled = False
        Else
            'Incrementamos en una unidad la variable estática
            'ticker = bteContador_entrante
            ticker_entrante = bteContador_entrante * 4
            'List_minuto_llegada.Items(0).Selected = True
            If (List_minuto_llegada.Items(0).Text <= ticker_entrante) Then
                'List_ext.Items(0).Selected = True
                If List_espera.Items.Count > 0 Then
                    List_llamando.Items.Add(List_espera.Items(0).Text)
                    List_espera.Items.RemoveAt(0)
                    Txt_ext_espera.Text = List_espera.Items.Count()
                    Txt_lineas_desocupadas.Text = Txt_num_lineas.Text - List_llamando.Items.Count()
                    Txt_lineas_ocupadas.Text = List_llamando.Items.Count()
                End If

                If List_llamando.Items.Count < Txt_num_lineas.Text Then
                    List_llamando.Items.Add(List_ext.Items(0).Text)
                    List_minuto_llegada.Items.RemoveAt(0)
                    List_ext.Items.RemoveAt(0)
                    Txt_lineas_desocupadas.Text = Txt_num_lineas.Text - List_llamando.Items.Count()
                    Txt_lineas_ocupadas.Text = List_llamando.Items.Count()
                Else
                    List_espera.Items.Add(List_ext.Items(0).Text)
                    List_ext.Items.RemoveAt(0)
                    List_minuto_llegada.Items.RemoveAt(0)
                    Txt_ext_espera.Text = List_espera.Items.Count()
                End If
            End If
            bteContador_entrante = bteContador_entrante + 1
        End If
    End Sub
End Class