作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
<分区>
我正在实现一种通信算法,以非常快地定期发送信息,即每包之间发送 1 毫秒。我有一个使用任务发送包的功能版本。这是我的代码示例:
private void Work()
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
while (!cancellationTokenSource.Token.IsCancellationRequested)
{
if (!Pack.PeriodicOn)
cancellationTokenSource.Cancel();
// Time used to send the packs before the interval time
double tolerance = Pack.Interval * 0.2F;
// In case of interval bigger than 25ms send pasks only 5ms before
if (tolerance > 5) tolerance = 5;
TimeSpan timeSpan = stopwatch.Elapsed;
// The waiting time is controlled by the condition below, if the condition is false, the while loop continues execution
// Send the information a little bit before to interval time to deal with the transmision delay
if (Pack.LastSent.TotalMilliseconds == 0 ||
timeSpan.TotalMilliseconds - Pack.LastSent.TotalMilliseconds >=
(Pack.Interval - tolerance))
{
SendData(Pack);
Pack.LastSent = timeSpan;
}
}
Pack.LastSent = new TimeSpan(0);
}
我的问题在于 CPU 使用率增加到不理想的水平。我知道我可以通过引入一些延迟来避免这种情况,但是,Thread.Sleep(1) 非常不准确,包之间的实际传输间隔增加,如果我使用 await Task.Delay(1) 似乎会产生相同的效果。
有没有人有其他方法可以准确地延迟任务?
提前致谢!
我是一名优秀的程序员,十分优秀!