При разработке программы для расчета частоты и ширины импульса импульса, генерируемого таймером 555 таймера, поступающего на ПК через параллельный порт ПК. Я заметил, что каждый раз, когда я запускаю код, он показывает разные значения, поэтому я начинаю тестировать циклы и таймеры на точность. Я запустил следующий код и пришел к выводу, что они неточны (возможно, я ошибаюсь, пожалуйста, поправьте меня, если я есть!):
Для таймеров:
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");
}
}
ВЫВОД: Должно быть одинаковым, но:
Для LOOP:
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");
}
ВЫВОД: Должно быть одинаковым, но:
Что делать, чтобы сделать петли и таймер точным, есть ли способ сделать это? Или мне нужно перейти к сложному и сложному C-коду и DOS?
Я думаю, что это основная причина для получения неправильных значений в этом вопросе: Количество входных частот параллельного порта - С#