elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ¿a qué se debe que el timer en winforms sea poco exacto?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿a qué se debe que el timer en winforms sea poco exacto?  (Leído 4,695 veces)
Bengalaa

Desconectado Desconectado

Mensajes: 2


Ver Perfil
¿a qué se debe que el timer en winforms sea poco exacto?
« en: 22 Abril 2010, 16:37 pm »

Saludos foreros...

Estoy haciendo una aplicación en .Net que mide el tiempo de reacción de un individuo, es para una tésis, así que necesito que la información sobre el tiempo sea muy exacta.

Así que agregué un timer en una winform, y lo programé, para que en el evento Tick, le sumara 1 a la variable Milisegundos, y lo escribiera en un label, dividido entre 100 y redondeado a 3 decimales. Así:

Código:
Option Explicit On
Option Strict On
Imports System.Math
Imports System.Data.OleDb

Public Class Form1
    Public Milisegundos As Integer

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Milisegundos = Milisegundos + 1

        LblTiempoTot.Text = Round(Milisegundos / 100, 3).ToString
        'LblTiempoTot.Text = Milisegundos.ToString

    End Sub
End Class

La propiedad Interval del Timer1 es 1.

El problema es:

Heché a andar el programa, y comparé la Label del tiempo, con los segundos del reloj de Windows; y TAN! es inexacto.

Resulta que tarda 2 segundos a veces... pero, a veces, el cambio lo hace exacto, y es muy inestable.

Ésto solo pasa cuando uso ese sistema, de milisegundos; intenté cambiar el intervalo a 1000, y no lo dividí ni lo redondeé, y me resulta muy exacto.

¿A qué se debe ésto? (debo resaltar que mi compu tiene una horrible RAM de 512 MB) si es por la RAM, cuál es el requerimiento necesario para que el timer sea exacto?

Les agredeceré un montón su ayuda  :D




P.S: saludos! ya que es mi primer post, espero seguir colaborando ^_^

----modifico----
otra cosita más... si se puede saber (o tengo que abrir otra pregunta en VB6?) VB6 necesitaría menos recursos?


« Última modificación: 22 Abril 2010, 17:25 pm por Bengalaa » En línea

Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: ¿a qué se debe que el timer en winforms sea poco exacto?
« Respuesta #1 en: 22 Abril 2010, 17:54 pm »

Bueno tienes razón la exactitud es nula y respecto a la RAM no es ese el problema pues yo tengo 4Gb e igual pasa el problema.

Allí está esa diferencia de tiempo es la que tarda la aplicación en realizar las tareas que le asignastes en el sub del timer...


« Última modificación: 22 Abril 2010, 18:28 pm por Keyen Night » En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Atrum

Desconectado Desconectado

Mensajes: 65



Ver Perfil WWW
Re: ¿a qué se debe que el timer en winforms sea poco exacto?
« Respuesta #2 en: 22 Abril 2010, 18:09 pm »

Lo que sucede es que el evento Tick realiza lo que tienes en tu Sub y no es asincrono, eso quere decir que los ticks no continuan hasta que termina de hacer lo que tienes en tu evento:

Código
  1.        Milisegundos = Milisegundos + 1
  2.  
  3.        LblTiempoTot.Text = Round(Milisegundos / 100, 3).ToString
  4.        'LblTiempoTot.Text = Milisegundos.ToString
  5.  

Asi que esto es lo que te podria generar la inecrtidumbre, y si tu maquina es lenta o esta cargada de transacciones pues los procedimientos pueden tardar mas, asi que yo te sugeriria que utilizaras un Stopwatch que es un simple objeto cronometro, te dejo un ejemplo con dos botones y un label:

Código
  1. Public Class Form1
  2.  
  3.    Private stopw As New Stopwatch 'Creo mi nuevo stopwatch
  4.  
  5.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  6.        Timer1.Interval = 1 'declaro intervalo en 1
  7.        Timer1.Start() 'inicio el timer
  8.        stopw.Start() 'Inicio el stopwatch, aqui es donde empieza a contar el tiempo
  9.    End Sub
  10.  
  11.    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  12.        'Aqui imprimo el valor de los minutos,segundos y milisegundos del stopwatch
  13.        'mientras este sigue avanzando sin interrupciones
  14.        Label1.Text = stopw.Elapsed.Minutes.ToString & " : " _
  15.        & stopw.Elapsed.Seconds.ToString & " : " _
  16.        & stopw.Elapsed.Milliseconds.ToString
  17.    End Sub
  18.  
  19.    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  20.        'Con este boton detengo el timer y el stopwatch
  21.        stopw.Stop()
  22.        Timer1.Stop()
  23.    End Sub
  24.  
  25. End Class
  26.  

Bueno, pues espero que esto te sirva para tu proyecto, Suerte
En línea

Bengalaa

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: ¿a qué se debe que el timer en winforms sea poco exacto?
« Respuesta #3 en: 22 Abril 2010, 18:40 pm »

Gracias Keyen Night! gracias Xtriker!! me sirvió un montón XD

dejo el código final:

Código:
Public Class Form1
    Public ElCronometro As New Stopwatch

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        Dim MiliSegundos As Long = _
            ElCronometro.ElapsedMilliseconds
        LblTiempoTot.Text = Round(MiliSegundos / 1000, 4).ToString
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ElCronometro.Start()
    End Sub

End Class


Ustedes son épicos, estaba arruinada con ésto del timer @.@'
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Hacer un Clon Exacto de un Sitio de Joomla??..
Desarrollo Web
ositocaro 3 3,818 Último mensaje 16 Febrero 2011, 07:44 am
por madpitbull_99
WinWatcher (WinForms Application Source)
.NET (C#, VB.NET, ASP)
Novlucker 3 3,842 Último mensaje 3 Diciembre 2012, 02:59 am
por Novlucker
Ciclo exacto
Programación C/C++
neeeko 1 2,581 Último mensaje 22 Febrero 2013, 04:59 am
por 85
Duda con WinForms y correcta adaptación a varios tamaños de pantalla
.NET (C#, VB.NET, ASP)
RevolucionVegana 4 4,111 Último mensaje 2 Julio 2017, 09:52 am
por RevolucionVegana
Elegir el evento exacto « 1 2 »
Programación C/C++
Meta 11 7,760 Último mensaje 31 Julio 2017, 02:44 am
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines