当前位置:编程学习 > C#/ASP.NET >>

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的计时器达不到你需要的精度。 --------------------编程问答--------------------
引用 6 楼 be_man 的回复:
那有没有什么办法可以解决?除了windowsAPI

你可以改变一下编程思路,不必自己递增毫秒来计算时间。考虑一下每秒读取一次系统时间,再把读取的时间显示出来? --------------------编程问答-------------------- “每10毫秒执行一次”

你如何做到? --------------------编程问答-------------------- 你自认为每10秒执行什么动作之前,至少要去了解一点稍微深入的东西。比如说吧,如果你使用WinForm类库中的定时器,它基于windows消息泵机制,因此要排队等待windows处理程序轮询到它才执行,并且当较快重复这个事件时windows系统实际上还会自动丢掉一些事件。而如果要稍微高一些精度的定时功能,至少要使用Threading类库中的定时器。 --------------------编程问答--------------------
引用 10 楼 sp1234 的回复:
你自认为每10秒执行什么动作之前,至少要去了解一点稍微深入的东西。比如说吧,如果你使用WinForm类库中的定时器,它基于windows消息泵机制,因此要排队等待windows处理程序轮询到它才执行,并且当较快重复这个事件时windows系统实际上还会自动丢掉一些事件。而如果要稍微高一些精度的定时功能,至少要使用Threading类库中的定时器。

谢了,这个很有用,那你的意思Threading类库中的定时器为什么就可以做到很精确? --------------------编程问答--------------------
引用 5 楼 mobydick 的回复:
.net精确度只有15ms


.NET 精确度可以达到 100ns
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,