Это старый поток, который встречается во многих моих поисках, но в Win7 появился новый планировщик, и, похоже, он ведет себя не так, как указано выше.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
DateTime dtEnd = DateTime.Now.AddSeconds(1.0);
int i = 0;
while (DateTime.Now < dtEnd)
{
i++;
Thread.Sleep(1);
}
Console.WriteLine(i.ToString());
i = 0;
long lStart = DateTime.Now.Ticks;
while (i++ < 1000)
Thread.Sleep(1);
long lTmp = (DateTime.Now.Ticks - lStart) / 10000;
Console.WriteLine(lTmp.ToString());
Console.Read();
}
}
}
С помощью приведенного выше кода мой первый результат дал 946. Таким образом, за период в 1 секунду при использовании сна в 1 мс я получил 946 пробуждений. Это очень близко к 1 мс.
Во второй части спрашивается, сколько времени потребуется, чтобы выполнить 1000 событий сна по 1 мс каждый. Я получил 1034 мс. Опять же, почти 1 мс.
Это было на 1,8 ГГц core2duo + Win7 с использованием .Net 4.0
Редактировать: запомните, сон (x) не означает, что вы просыпаетесь в это время, это означает, что разбудите меня не раньше, чем в этот раз. Это не гарантировано. Хотя вы можете увеличить приоритет потока, и Windows должна запланировать ваш поток до потоков с более низким приоритетом.