C#秒表计时器的精确度问题
ms++;//毫秒if (ms == 100)
{
s++;//秒
ms = 0;
}
if (s == 60)
{
m++;//分
s = 0;
}
if (ms <= 9)
{
mss = "0" + ms.ToString();
}
else
mss = ms.ToString();
if (s <= 9)
{
ss = "0" + s.ToString();
}
else
ss = s.ToString();
if (m <= 9)
{
m_s = "0" + m.ToString();
}
else
m_s = m.ToString();
str = " " + m_s + ":" + ss+" " + mss;
dcx.Clear(Color.White);
dcx.DrawString(str, new Font("LCD", 32), Brushes.Black, new PointF(0, 0));
上诉是代码,没10毫秒执行一次,当ms为100的时候应当为1秒,ms清零。但是为什么始终有很大的时差,我看了程序没有什么问题。希望有人给出答案。 --------------------编程问答-------------------- ms++;//毫秒
if (ms == 100)
{
s++;//秒
ms = 0;
}
100毫秒=1秒吗? --------------------编程问答-------------------- 1000ms=1s --------------------编程问答-------------------- 楼上的两楼,我是精确到十毫秒的位子的,每十毫秒计算一次。所以100*10毫秒等译一秒。 --------------------编程问答-------------------- --------------------编程问答-------------------- .net精确度只有15ms --------------------编程问答-------------------- 那有没有什么办法可以解决?除了windowsAPI --------------------编程问答-------------------- 你的程序逻辑没问题,但你的程序运行环境有问题。windows不是实时系统,程序的线程不会自始至终占用CPU资源,所以window的计时器达不到你需要的精度。 --------------------编程问答--------------------
你可以改变一下编程思路,不必自己递增毫秒来计算时间。考虑一下每秒读取一次系统时间,再把读取的时间显示出来? --------------------编程问答-------------------- “每10毫秒执行一次”
你如何做到? --------------------编程问答-------------------- 你自认为每10秒执行什么动作之前,至少要去了解一点稍微深入的东西。比如说吧,如果你使用WinForm类库中的定时器,它基于windows消息泵机制,因此要排队等待windows处理程序轮询到它才执行,并且当较快重复这个事件时windows系统实际上还会自动丢掉一些事件。而如果要稍微高一些精度的定时功能,至少要使用Threading类库中的定时器。 --------------------编程问答--------------------
谢了,这个很有用,那你的意思Threading类库中的定时器为什么就可以做到很精确? --------------------编程问答--------------------
.NET 精确度可以达到 100ns
补充:.NET技术 , C#