我有一个使用SerialPort类与之通信的设备(数字指示器)。设备文档指出我需要在写入之间有250毫秒的延迟。有没有办法在不给系统带来额外延迟的情况下强制执行此操作?我知道这可能听起来像是我太担心一些非常小的东西,但这些指标中有三个很常见,但并非总是如此。基本上,有一种很好的方法可以强制你不要在不到250毫秒的时间内再次发送,但如果它是5秒并且我尝试发送,我不想无缘无故地延迟250毫秒。 / p>
思想?
答案 0 :(得分:2)
你应该有一些类用于写入串口,也许是单点写入(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;
}
答案 1 :(得分:1)
暂停线程应该适合你:
System.Threading.Thread.Sleep(250);
但是,这可能有点不准确,因为您无法保证下次调度线程时。如果你需要精确的时间,你最好使用旋转等待。
答案 2 :(得分:0)
在每次传输之前获取时间戳。睡眠250-(现在 - 然后)毫秒(显然是钳位在零)。这似乎是你所要求的。
相反,如果您担心操作系统调度问题导致平均时间不是250毫秒,或者确切地说距离精确度超过250毫秒,那么您手上就会遇到更难的问题而且您需要阅读硬实时技术(也许购买一些额外的硬件)。