Đây là một chủ đề cũ mà đi lên trong rất nhiều tìm kiếm của tôi, nhưng Win7 có một lịch trình mới và dường như hoạt động khác so với trên.
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();
}
}
}
Với mã trên, kết quả đầu tiên của tôi cho 946. Vì vậy, trong khoảng thời gian 1 giây sử dụng 1ms ngủ, tôi đã nhận 946 lần thức giấc. Đó là rất gần với 1ms.
Phần thứ hai yêu cầu phải mất bao lâu để thực hiện 1000 sự kiện ngủ ở mức 1ms mỗi sự kiện. Tôi có 1034ms. Một lần nữa, gần 1ms.
Đây là trên Core2Duo 1.8GHz + Win7 sử dụng Net 4.0
Edit: nhớ, giấc ngủ (x) không có nghĩa là thức dậy lên vào thời điểm này, nó có nghĩa là đánh thức tôi dậy không sớm hơn thời gian này . Nó không được bảo đảm. Mặc dù, bạn có thể tăng mức độ ưu tiên của chuỗi và Windows sẽ lên lịch chuỗi của bạn trước các chuỗi ưu tiên thấp hơn.
Tất cả các câu trả lời cho đến nay cho thấy hiệu ứng sẽ không đáng kể, nhưng bạn có thể giải thích rõ ràng về những gì bạn đang cố gắng thực hiện với điều này không? – JMD
Tôi chỉ đang cố gắng xem ứng dụng GUI của mình có dành tất cả thời gian trong chuỗi này vì độ trễ 1ms ngắn hay không. –