none
Uso de timer para obtener cronometraje distinto RRS feed

  • Pregunta

  • Tengo un dilema como hacer esto usando solo 1 control timer

    estoy haciendo unos cronometrajes para equipos pc, entonces cuando al primero le doy iniciar perfecto, todo esta cuando quiero hacerlo para un tercero.

    Si bien le indico al segundo que recien inicie este toma el valor que cronometro del primer pc que ya esta corriendo pero no lo inicia desde 0 entonces es acaso que debo yo hacer otro timer para dicho pc? si fueran pocos no habria problema pero si fuera 20 tendre que hcer 20 timer? quizas alguien de uds me eche una mano para usar 1 solo timer para muchos equipo y este se inicie para cada uno segun la necesidad.

    Ojala me hayan entendido

    Para que me entiendan si detengo la pc01 se detiene el cronometro de la pc02 si inicio la pc01 se inicia la pc02 cuando no deberia ya que no esta en uso entonces como usar el timer para cuando el equipo lo solicite o debo crear otro timer?

    La imagen muestra inica la pc01 sin embargo el cronometro de la 2 esta corriendo cuando este debe estar en 0 y solo iniciar cuando se le indique.

    Saludos


    lunes, 29 de enero de 2018 12:51

Respuestas

  • hola javier porque no usar variables y con el uso de datetime conocer lo que ha transcurrido?? yo haria algo asi

    using System;
    					
    public class Program
    {
    	static DateTime tiempoInicial = DateTime.MinValue;
    	public static void Main()
    	{
    		Console.WriteLine("Hello World");
    		IniciarPrestamo();
    		//FinalizarPrestamo();
    		
    	}
    	
    	
    	static void IniciarPrestamo()
    	{
    
           tiempoInicial = DateTime.Now;
    	   Console.WriteLine(string.Format("Tiempo transcurrido: {0:hh:mm:ss}", tiempoInicial));
    	}
    
    	static void FinalizarPrestamo()
    
    	{
    
        TimeSpan tiempoPrestamo = DateTime.Now - tiempoInicial; // esto devuelve un TimeSpan
    
    
         Console.WriteLine(string.Format("Tiempo transcurrido: {0:hh:mm:ss}", tiempoPrestamo));
    
    	}
    }
    el programa en funcionamiento

    • Marcado como respuesta Javier Roque lunes, 29 de enero de 2018 16:07
    lunes, 29 de enero de 2018 14:19
  • Buenas Javier,

    La verdad, es que usar en System.Windows.Forms.Timer como cronometro, si quieres que sea preciso, es mala idea, porque no es determinista, es decir, no es seguro que si le pones cada segundo, se ejecute cada 1 y no cada 1 +- %.

    Para lo que quieres, si quieres un tiempo exacto, es mejor que almacenes el inicio en un datetime, y que si quieres mostrar el resultado, en el tick del timer hagas (DateTime.Now - dateInicio) y muestres ese resultado, va a ser más exacto.

    Evalúa la respuesta que ya te ha dado greg_dorian ya que es muy interesante, lo único que tendrías que hacer es añadir el tick del timer  

    Console.WriteLine(string.Format("Tiempo transcurrido: {0:hh:mm:ss}", DateTime.Now - tiempoInicial));

    en caso de querer visualizarlo durante su duración

    Nos comentas si tienes dudas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta Javier Roque lunes, 29 de enero de 2018 16:07
    lunes, 29 de enero de 2018 15:55

Todas las respuestas

  • HAz solo un timer que vaya corriendo cada  segundo si quieres afinar mas tu mismo.

    Cra un list de int o long que guarden por cada click del cronomentro el numero de  veces que entro en el tick del timerdesde el ultimo click.

    quedadria algo asi:

    long ticks = 0

    ListV<Long>  lValores = new list<Long>();

    private void Tick_timer1 ....

    {

    ticks++;

    }


    private void button_click(....

    {

    if (timer1.enabled)

    {

    ticks++;

    this.lValores.Add(ticks);

    ticks=0;

    }

    else

    {

    timer1.enabled == true;

    timer1.start();

    }

    }

    Ahora en la lista ticks tienes los intervalos de cada vez que le diste click al boton, sdi fue la primera vez arrancas el cronometro.

    lunes, 29 de enero de 2018 13:40
  • Disculpa a que se refiere con crear un list? Es una tabla sql? o que? dpnde almacenaria eso clicks?

    Me lo podrias poner en codigo VB la declaracion del tick? porque esta en C#? No entiendo tu código por mas que lo convierto sale sin sentido

    Saludos




    lunes, 29 de enero de 2018 14:07
  • hola javier porque no usar variables y con el uso de datetime conocer lo que ha transcurrido?? yo haria algo asi

    using System;
    					
    public class Program
    {
    	static DateTime tiempoInicial = DateTime.MinValue;
    	public static void Main()
    	{
    		Console.WriteLine("Hello World");
    		IniciarPrestamo();
    		//FinalizarPrestamo();
    		
    	}
    	
    	
    	static void IniciarPrestamo()
    	{
    
           tiempoInicial = DateTime.Now;
    	   Console.WriteLine(string.Format("Tiempo transcurrido: {0:hh:mm:ss}", tiempoInicial));
    	}
    
    	static void FinalizarPrestamo()
    
    	{
    
        TimeSpan tiempoPrestamo = DateTime.Now - tiempoInicial; // esto devuelve un TimeSpan
    
    
         Console.WriteLine(string.Format("Tiempo transcurrido: {0:hh:mm:ss}", tiempoPrestamo));
    
    	}
    }
    el programa en funcionamiento

    • Marcado como respuesta Javier Roque lunes, 29 de enero de 2018 16:07
    lunes, 29 de enero de 2018 14:19
  • Ok ya lo reviso si antes usaba eso y se controlaba mejor pero mmmm te refieres a usar 2 dtp luego extraer la diferencia cuanto tiempo trancurrio y bueno asi darme cuenta que casi igual al tiempo cronometrado? pero se controlaria mejor capturando las horas ? hora que inicia , hora que finaliza

    algo asi te refieres?

    lunes, 29 de enero de 2018 14:59
  • Buenas Javier,

    La verdad, es que usar en System.Windows.Forms.Timer como cronometro, si quieres que sea preciso, es mala idea, porque no es determinista, es decir, no es seguro que si le pones cada segundo, se ejecute cada 1 y no cada 1 +- %.

    Para lo que quieres, si quieres un tiempo exacto, es mejor que almacenes el inicio en un datetime, y que si quieres mostrar el resultado, en el tick del timer hagas (DateTime.Now - dateInicio) y muestres ese resultado, va a ser más exacto.

    Evalúa la respuesta que ya te ha dado greg_dorian ya que es muy interesante, lo único que tendrías que hacer es añadir el tick del timer  

    Console.WriteLine(string.Format("Tiempo transcurrido: {0:hh:mm:ss}", DateTime.Now - tiempoInicial));

    en caso de querer visualizarlo durante su duración

    Nos comentas si tienes dudas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta Javier Roque lunes, 29 de enero de 2018 16:07
    lunes, 29 de enero de 2018 15:55
  • Si gracias ya me dio la idea y ya lo estoy solucionando a una mejor forma de la manera como indican.

    Saludos, 

    Gracias

    lunes, 29 de enero de 2018 16:07