我有我使用SerialPort类进行通信的设备(数字指示符)。该器件文档指出我需要写之间的250毫秒的延迟。有没有办法强制执行这种不把额外延迟进入系统?我知道这可能听起来像我太担心的东西,是非常小的,但有三个的这些指标,它是阅读他们经常,但不是所有的时间。基本上,有没有强制执行,你不小于250毫秒再次发送一个很好的方式,但如果它已经5秒钟,我尝试发送,我不想耽误一个额外的250毫秒没有理由。

思想?

有帮助吗?

解决方案

您应该有某种类的用于写入串行端口,写作(一WriteToPort功能或某事)也许是一个单点的目的。

在这,你可以保存当前的时间你写的每一次,然后在该延迟使用逻辑。 SO:

DateTime lastWritten;
TimeSpan timeBetweenWrites = new Timespan(0,0,0,0,250);
void WriteToDevice(string data)
{
    TimeSpan sinceLastWrite=DateTime.Now-lastWritten;
    if(sinceLastWrite<timeBetweenWrites)
        Thread.Sleep(timeBetweenWrites-sinceLastWrite);
    SerialPort.Write(data);
    lastWritten=DateTime.Now;
}

其他提示

挂起线程应该为你工作:

System.Threading.Thread.Sleep(250);

不过,这可有点不准确的,因为你不能你的线程将被安排在下一次保证。如果你需要精确计时,你最好使用自旋等待。

获取每个传输之前的时间戳。对于250-(现在 - 然后)睡眠毫秒(钳位在零,很明显)。这似乎是你问什么。

相反,如果你担心的事情像OS调度问题作出时间不在250ms的平均值,或者从250毫秒比一点点更准确地关闭,那么您对我们的手困难的问题,您需要对硬实时技术,读了(也许购买一些额外的硬件)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top