我有一个软件,需要一个循环才能使用睡眠,等待或类似功能。因为我正在将数据包发送到服务器,并且如果我发送数据包的速度太快,我的连接将被“优美地”
关闭由于我的应用程序循环非常复杂,因此我将发布一个示例代码,该代码再现了完全相同的问题。告诉我在运行相同的循环时您会得到什么。
using System;
namespace SleepTest
{
class Program
{
public static long PreviousCall = 0;
public static int i = 0;
static void Main(string[] args)
{
while (true)
{
LogAsync("DATA:"+i);
i++;
System.Threading.Thread.Sleep(100);
}
}
public static async void LogAsync(string data)
{
long time = DateTimeOffset.Now.ToUnixTimeMilliseconds() - PreviousCall;
PreviousCall = DateTimeOffset.Now.ToUnixTimeMilliseconds();
string fulldata = "[" + time + "]" + " -> " + data;
Console.Out.WriteLineAsync(fulldata);
}
}
}
在计算机上的行为方式:PC
在我拥有的其他PC上的运行状况
其他PC
我在Linux(16ish毫秒分辨率)上也有相同的结果。在Windows 8.1(也为16ish)上,在我的其他Windows 10计算机上,我也获得了较高的准确度(0 / 1ms),但是,我有一台Windows 10计算机为我提供了16ish分辨率计时器。
我仍然没有找到设置分辨率计时器的可靠方法,我在SO和Google上进行了大量搜索...很多...
有人可以帮助我吗?你的结果是什么? 如果我应该完全放弃睡眠,计时器和延迟,那么我将需要使用什么方法才能在不使用睡眠或不依赖外部事件的情况下互相发送某些数据包至少250 / 500ms,因为这些数据包没有响应任何事情,我都必须在我认为有必要的时候亲自寄给他们(但它们必须在彼此的一定时间内)。