Avisos


Resultados 1 al 9 de 9

Tema: vb2008 problema con timer y otros

  1. #1 vb2008 problema con timer y otros 
    Avanzado
    Fecha de ingreso
    Jul 2007
    Ubicación
    en Linux ;D
    Mensajes
    333
    Descargas
    4
    Uploads
    0
    hola,
    hemos realizado un programa con visual basic 2008 express que realiza el envio de mensajes a un automata y realize la escucha de las respuestas que da el automata.

    El problema surge con el timer que hemos introducido, cuando esta realizando la escucha automataica con el periodo de tiempo fijado, con el timer los botones para realizar algun proceso quedan semi bloqueados, es decir, cuando se quiere utilizar algun boton y esta el timer, hay q pulsar repetidas veces hasta que el programa se da cuenta de que se ha pulsado dicho boton.
    Mi pregunta es por que se produce este problema y cual es la posible solucion para dicho problema¿?

    Ademas, hemos creado una grafica representando los valores de un potenciometro de un automata, y nos interesaria que cuando la grafica llegue a su valor maximo de representacion (a la derecha), haga un scroll, es decir, que vaya deslizando la representacion de la grafica hacia la izquierda y siga representando los valores.

    muchas gracias de antemano!

    saludos
    * * @* * Olvídate de:
    *@ @* * los anti-virus, anti-spyware, anti-nada y anti-todo.
    * * @* * y del software que expira a los 30 días
    * * @* *
    * @@@* linux
    Citar  
     

  2. #2  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    No use nunca vb 2008 y hace rato que no uso vb6, además creo que cambió la implementación del timer, pero supongo que dependiendo como se lo llama, cuando el timer se activa puede detener todo el thread.

    Si podés pega el código que les está trayendo problemas.


    En cuanto a la segunda pregunta, como han creado la "gráfica"? Se trata de un gif animado o de imágenes que se van actualizando de acuerdo al progreso o periódicamente?


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

  3. #3  
    Avanzado
    Fecha de ingreso
    Jan 2010
    Mensajes
    813
    Descargas
    1
    Uploads
    0
    Lo más normal en estos casos es que mientras un código se está ejecutando, la interfaz no se actualiza, por lo que parece estar 'congelada'. Hay que llamar a una función -la cual no recuerdo- para forzar la actualización.
    Citar  
     

  4. #4  
    Avanzado
    Fecha de ingreso
    Jul 2007
    Ubicación
    en Linux ;D
    Mensajes
    333
    Descargas
    4
    Uploads
    0
    Esto es parte del codigo
    'reloj de tiempo para la escucha continua
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If SerialPort1.IsOpen Then
    cadena_recibir = SerialPort1.ReadExisting()
    ... mucho mas codigo
    End If
    end sub
    Otra gente me ha aconsejado dos cosas diferentes,
    1.- usar threads en vez de timer (que no se como funciona)
    2.- meter dentro del timer "aplication.doevents" (¿a esto te refieres, Fruit?)

    ¿que opinais vosotros?

    Respecto a la grafica:
    'dibujo de la grafica
    'declaramos area de dibujo
    Dim grafica As Graphics = PictureBox1.CreateGraphics()
    'declaramos lapiz
    Dim lapiz As New Pen(Color.Black)
    grafica.DrawLine(lapiz, puntoX1, puntoY1, puntoX2, puntoY2)
    gracias por el interes, muchachos
    * * @* * Olvídate de:
    *@ @* * los anti-virus, anti-spyware, anti-nada y anti-todo.
    * * @* * y del software que expira a los 30 días
    * * @* *
    * @@@* linux
    Citar  
     

  5. #5  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    En algun lado tenés que estar llamándolo con un Timer1.start(), después de eso tendrías que poner lo siguiente:
    Código:
    blTimerDurmiendo = True
    While blTimerDurmiendo
        Application.doevents()
    End While
    Siendo blTimerDurmiendo una variable booleana (también podría ser un integer o cualquier cosa que permita usarse como booleano).

    Cuando se llama a Timer1_tick (por que pasó el tiempo durante el que el timer estuvo durmiendo) ponés blTimerDurmiendo a False y listo.


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

  6. #6  
    Avanzado
    Fecha de ingreso
    Jul 2007
    Ubicación
    en Linux ;D
    Mensajes
    333
    Descargas
    4
    Uploads
    0
    vale, gracias por la respuesta.
    Entiendo lo que me dices, y como lo quieres hacer.

    Pero el problema, es que:

    Private Sub Form1_Load
    Timer1.Start()
    end sub
    Desde que arranca el programa, pone un timer de 10ms, para comprobar el puerto (quizas pueda ponerlo a 100ms, pero no mas tiempo). Y nunca lo paro.
    Y claro, yo con ese timer controlo el resto de variables.

    ¿donde puedo poner que compruebe que esta la variable inventada timerdurmiendo=false?
    Ese es mi problema. ¿como hago para que lo haga ciclicamente? A mi se me ocurrio un timer. Pero, ¿que otras opciones tengo? Porque ¿no existe ningun form evento ciclico, verdad?

    A ver como discurrimos esto....

    saludote
    * * @* * Olvídate de:
    *@ @* * los anti-virus, anti-spyware, anti-nada y anti-todo.
    * * @* * y del software que expira a los 30 días
    * * @* *
    * @@@* linux
    Citar  
     

  7. #7  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    Podes llamar a Timer1.start() en el form_load, ahi justo despues del start() ponés el bucle, incluso podés poner todo eso en otro while sin fin, o que tenga otro flag de salida distinto para cuando quieras evitar que se siga ejecutando el Timer.

    Código:
    Private Sub Form1_Load
      flag = True
      While flag
        Timer1.Start()
        While blTimer
                  application.doevents()
            End While
      End While
    end sub

    A la hora de salir le pones flag = False justo antes de hacer el Exit


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

  8. #8  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    No había visto lo de la gráfica, pero leyendo el código no me queda muy claro como es que lo hacen. Supongo que dibujan una linea y la van moviendo según el valor del potenciómetro. Lo que no se es si para cambiar el valor del potenciómetro usan un scroll o que.

    Explicá un poco mejor esta parte que soy poco ocurrente. :P


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

  9. #9  
    Avanzado
    Fecha de ingreso
    Jul 2007
    Ubicación
    en Linux ;D
    Mensajes
    333
    Descargas
    4
    Uploads
    0
    mmm voy a probarlo.
    Gracias por la respuesta.

    En cuanto tenga esto, te explico lo de la grafica.

    Gracias!!!
    * * @* * Olvídate de:
    *@ @* * los anti-virus, anti-spyware, anti-nada y anti-todo.
    * * @* * y del software que expira a los 30 días
    * * @* *
    * @@@* linux
    Citar  
     

Marcadores
Marcadores
Permisos de publicación
  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •