none
Manejo de timer Visaul C#

    Question

  • Hola

    Estoy usando dos timer en paralelo, pero no parecen estar ejecutandose como deberian, tengo un timer con un intervalo de 100 milisegundos y el otro con un intervalo de 3 segundos. sin embargo cunado grafico el tiempo con el resultado de mi codigo, puedo ver que el timer de 3 segundos se esta activando cada 2.6 segundos, ahora no se si es eso o es que el primer timer se tarda mas de 100 milisengudos.

    este es el codigo donde programo los timer

    this.timer1.Interval = 100;
    this.timer1.Enabled = true;
    this.timer1.Tick += new System.EventHandler(Discretizar);
    
    this.timer3.Interval = 3000;
    this.timer3.Enabled = true;
    this.timer3.Tick += new System.EventHandler(Continue);

    podria alguien decirme si esta es la forma adecuada de  manejar timers en paralelo ?? y como puedo verificar que el codigo en el procedimiento Discretizar se este ejecutando en 100 milisegundos o meno ?

    Sunday, January 20, 2013 2:12 PM

All replies

  • hola

    los tiempos que estas suando son muy pequeños y si ademas en estos pones codigo genera un desfase en la ejecucion

    sino pondrias ningun codigo seguramente el timepo de los timer sea mas exacto, pero al haber codigo, mas si dices que estas graficando eso genera problemas con tiempos tan pequeños

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, January 20, 2013 2:26 PM
  • ok, pero necesito que el codigo que esta en el procedimiento Discretizar se ejecute cada 100 mili segundos mientras que el que esta en Continue cada 3 segundos, como puedo hacer para arreglar los timer. porq no puedo simplemente quitar el codigo necesito ejecutarlo cada intervalo. Por favor necesito ayuda con esto.
    Sunday, January 20, 2013 5:26 PM
  • el timer no tiene tanta precision como la que necesitas, realizar un proceso lleva tiempo y ese tiempo se lo quita a los timer, es como procesar una cola de mensajes el timer se lanza cada 100 ms, pero si el proceso que pones dentro requiere mas tiempo empezara a generarse una cola que no llegara aprocesar odo lo que le envies

    quizas debas usar thread, intenta usar el timer de System.Threading

    Timer Class

    al no generar bloqueos por ser un thread quizas repete mejor los intervalos pequeños que defines, pero ojo con el acceso concurente


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Sunday, January 20, 2013 5:41 PM
  • ah ok, ya veo cual es el problema. voy a tratar con la clase timer a ver como me va. muchas gracias.
    Monday, January 21, 2013 1:01 AM
  • hola probe con la clase Timer, pero sigue ocurriendo lo mismo, lo hice de esta manera

    using System.Timers;
    namespace timer
    {
        public partial class Form1 : Form
        {
            delegate void SetTextCallback(string text);
            delegate void SetChartCallback(Chart chart);
            System.Timers.Timer t1,t2;
            double tiempo = 0, To = 0.1, aux = 1; 
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                t2 = new System.Timers.Timer();
                t2.Interval = 100;
                t2.Elapsed += uno;
                t2.Start();
    
                t1 = new System.Timers.Timer();
                t1.Interval = 3000;
                t1.Elapsed += dos;
                t1.Start();
            }
    
            public void uno(object sender, EventArgs e)
            {
                tiempo = tiempo + To;
                this.textBox1.Text = Convert.ToString(tiempo);
    
                chart1.Series["Series1"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
    chart1.Series["Series1"].Points.AddXY(tiempo, aux);
                    chart1.Series["Series1"].ChartArea = "ChartArea1";
            }
    
    
    
            public void dos(object sender, EventArgs e)
            {
                aux = aux + 1;
                this.textBox2.Text = Convert.ToString(aux);
            }
    
           
            private void button2_Click(object sender, EventArgs e)
            {
                t1.Stop();
                t2.Stop();
            }
        }
    }
    
     

    los procedimientos uno y dos lo que hacen es incrementar aux y mostarlo por un textbox y el otro incrementa el tiempo cada To que es de 0.1 por cada repeticion. al graficar esto deberia de suceder lo siguiente, los primero 3 segundos aux = 1 una ves ocurrido esto se incrementan a 2 y luego en el segundo 6 se incrementa a 3 y asi sucesivamente, pero antes de que llegue a 3 o 6 o 9 el valor de aux ya se ha incrementado. osea esta ocurriendo lo mismo y lo probe sin la grafica y pasaba exactamente lo mismo.

    estoy haciendo algo mal ?? por q no logro que funcionen los timers??


    Monday, January 21, 2013 4:18 PM