C# Windows上可靠的短时间跨度测量

C# Windows上可靠的短时间跨度测量,c#,windows,cross-platform,multicore,time-measurement,C#,Windows,Cross Platform,Multicore,Time Measurement,我需要的代码将提供精确10毫秒的“滴答声”,我对许多文章感到困惑,其中一些文章与其他文章就如何在Windows中实现这一点相互矛盾 我已经完成了第一步-使用多媒体定时器提供1 mili的睡眠 有没有办法确保睡眠代码在所有机器上都能正常工作,不管是真是假,单处理器还是多处理器系统等 [编辑] 关于在多核系统中使用秒表的问题,前面有一个问题: [/edit]很抱歉,我不能在评论中写这个。。。 如果您有可能使用第二个线程,您可以 使用循环来浪费时间…如下所示: class yourTimer{

我需要的代码将提供精确10毫秒的“滴答声”,我对许多文章感到困惑,其中一些文章与其他文章就如何在Windows中实现这一点相互矛盾

我已经完成了第一步-使用多媒体定时器提供1 mili的睡眠

有没有办法确保睡眠代码在所有机器上都能正常工作,不管是真是假,单处理器还是多处理器系统等

[编辑] 关于在多核系统中使用秒表的问题,前面有一个问题:
[/edit]

很抱歉,我不能在评论中写这个。。。 如果您有可能使用第二个线程,您可以 使用循环来浪费时间…如下所示:

    class yourTimer{ 
    public  void startTimer(Action a)
    {
        ParameterizedThreadStart fu = new ParameterizedThreadStart(waiter);
        Thread t1 = new Thread(fu);
        t1.Start(a);
    }
    public void stopTimer()
    private void waiter(object o)
    {
        Action ac = (Action)o;
        while(waitin)
        {
            if(DateTime.Now.Millisecond%10==0)
            {
                ac.Invoke();
            }
            continue;
        }
    }
  }

但我认为这是一个相当丑陋的解决方案…

您是想测量这些滴答声,还是想在这些间隔内调用代码?首先,最好的解决方案是使用Stopwatch@Georg-以精确的间隔调用方法。另外,您似乎不知道秒表的问题,请查看我在问题中添加的链接。@Maimonides这些问题通常不会发生在最近的处理器上(即过去5年),但在任何情况下都可以通过设置线程关联性来修复。但是它不会让你在精确的毫秒数内睡眠。@MatthewWatson-关于新处理器的好消息!但是,我怎样才能实现短时间睡眠呢?我有一个计算周期,得出结论后,我需要把剩余的时间睡到下一个周期。我曾考虑过忙等待,但如果可能的话,我更喜欢另一种方法。@Maimonides因为Windows不是实时操作系统,实际上无法保证等待的毫秒精度。你可能大部分时间都能做到,但偶尔也会失败。