在 C#/.NET 环境中进行这种细粒度的时序控制没有简单或明显的方法。您可以使用Stopwatch
该类来接近,但分辨率对于实时工作来说不是很好。要使用计时器来做这样的事情 - 废话代码,但你循环,直到经过的时间是你想要的时间间隔:
Stopwatch swatch = new Stopwatch();
while(true)
{
swatch.Reset();
swatch.Start();
PortAccess.Output(888, 1);
while (swatch.ElapsedMilliseconds < 1) { }
swatch.Stop();
swatch.Reset();
swatch.Start();
PortAccess.Output(888, 0);
while (swatch.ElapsedMilliseconds < 1) { }
swatch.Stop();
}
Sleep
不应在任何地方用于计时。 Sleep
只是基本上说,“至少睡 X 毫秒”。所以Sleep(1)
可能会睡 25 毫秒。
顺便说一句:几乎没有 PC 有并行端口了。这是一种古老的——不,是在 PC 外部写入位或翻转输出的最古老的方法。通过直接输出到PC IO端口来做到这一点也很垃圾。您可以寻找具有不错驱动程序的外部数字 IO 设备/板/接口 - 更好的主意。