¿Son precisos los Timers y Loops en .Net?
Mientras desarrolla un programa para calcular la frecuencia y el ancho de pulso del pulso generado por un 555 temporizador IC, llega a la PC a través del puerto paralelo de la PC. Noté que cada vez que ejecuto el código muestra valores diferentes, así que comienzo a probar los bucles y los temporizadores para verificar su precisión. He ejecutado el siguiente código y llegué al punto de que son inexactos (podría estar equivocado, corríjame si lo soy):
Para los temporizadores:
int sec = 0;
private void button2_Click(object sender, EventArgs e)
{
sec = DateTime.Now.Second;
i = 0;
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (sec == DateTime.Now.Second)
{
i++;
}
else
{
timer1.Enabled = false;
MessageBox.Show(i.ToString(),"Timer Output");
}
}
SALIDA: Debería ser igual, pero:
En bucle:
private void button1_Click(object sender, EventArgs e)
{
i = 0;
CheckForIllegalCrossThreadCalls = false;
Thread t1 = new Thread(LoopTest);
t1.Start();
}
void LoopTest()
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
this.Cursor = Cursors.WaitCursor;
while (true)
{
if (sw.ElapsedMilliseconds != 1000)
{
i++;
}
else
{
break;
}
}
sw.Stop();
this.Cursor = Cursors.Default;
MessageBox.Show(i.ToString(), "Loop Output");
}
SALIDA: Debería ser igual, pero:
¿Qué debo hacer para que los bucles y el temporizador sean precisos? ¿Hay alguna forma de hacerlo? ¿O tengo que ir al código C duro y complejo y al DOS?
Creo que es la razón básica para darme valores erróneos en esta pregunta:Frecuencia de entrada del puerto paralelo de recuento - C #