static void Main(string[] args)
        {            for(int i =0;i<100;i++)
            {
               
                Console.WriteLine( i.ToString()+"__"+ DateTime.Now.ToString()+":"+DateTime.Now.Millisecond.ToString());
                
            }
}
怎么才能保证for循环执行时,打印的DateTime.Now不一样,,主要是指Millisecond,,毫秒我试过在for里面加上Thead.Sleep(1);但是打印出来的东西还是有些毫秒是一样的

解决方案 »

  1.   

    我记得Thread.Sleep最小间隔是10毫秒。
      

  2.   

    如果你想要按1递增的话,实现起来比较麻烦,你不如让Sleep的时间长一些。
    Sleep在毫秒等级上,不是你写多少就能停止多长时间的,有些误差
      

  3.   

     for (int i = 0; i < 100; i++)
                {
                    Console.WriteLine(i.ToString() + "__" + DateTime.Now.ToString() + ":" + DateTime.Now.Millisecond.ToString());
                    Thread.Sleep(1);
                }没啥问题啊
      

  4.   

    一个歪招
    DateTime dt = DateTime.Now;
    for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < 10000000; j++)
        {
        }
        dt = DateTime.Now;
        this.listBox1.Items.Add(i.ToString() + "__" + dt.ToString() + ":" + dt.Millisecond.ToString());
    }
      

  5.   

    数据表明加上Sleep(1)不会重复
    0__9/27/2011 16:57:36 PM:790
    1__9/27/2011 16:57:36 PM:794
    2__9/27/2011 16:57:36 PM:796
    3__9/27/2011 16:57:36 PM:799
    4__9/27/2011 16:57:36 PM:801
    5__9/27/2011 16:57:36 PM:803
    6__9/27/2011 16:57:36 PM:805
    7__9/27/2011 16:57:36 PM:807
    8__9/27/2011 16:57:36 PM:824
    9__9/27/2011 16:57:36 PM:832
    10__9/27/2011 16:57:36 PM:834
    11__9/27/2011 16:57:36 PM:836
    12__9/27/2011 16:57:36 PM:838
    13__9/27/2011 16:57:36 PM:841
    14__9/27/2011 16:57:36 PM:843
    15__9/27/2011 16:57:36 PM:845
    16__9/27/2011 16:57:36 PM:847
    17__9/27/2011 16:57:36 PM:849
    18__9/27/2011 16:57:36 PM:851
    19__9/27/2011 16:57:36 PM:853
    20__9/27/2011 16:57:36 PM:855
    21__9/27/2011 16:57:36 PM:857
    22__9/27/2011 16:57:36 PM:859
    23__9/27/2011 16:57:36 PM:861
    24__9/27/2011 16:57:36 PM:863
    25__9/27/2011 16:57:36 PM:865
    26__9/27/2011 16:57:36 PM:867
    27__9/27/2011 16:57:36 PM:869
    28__9/27/2011 16:57:36 PM:873
    29__9/27/2011 16:57:36 PM:877
    30__9/27/2011 16:57:36 PM:881
    31__9/27/2011 16:57:36 PM:884
    32__9/27/2011 16:57:36 PM:890
    33__9/27/2011 16:57:36 PM:894
    34__9/27/2011 16:57:36 PM:897
    35__9/27/2011 16:57:36 PM:902
    36__9/27/2011 16:57:36 PM:905
    37__9/27/2011 16:57:36 PM:908
    38__9/27/2011 16:57:36 PM:911
    39__9/27/2011 16:57:36 PM:917
    40__9/27/2011 16:57:36 PM:921
    41__9/27/2011 16:57:36 PM:924
    42__9/27/2011 16:57:36 PM:927
    43__9/27/2011 16:57:36 PM:930
    44__9/27/2011 16:57:36 PM:933
    45__9/27/2011 16:57:36 PM:936
    46__9/27/2011 16:57:36 PM:939
    47__9/27/2011 16:57:36 PM:942
    48__9/27/2011 16:57:36 PM:946
    49__9/27/2011 16:57:36 PM:948
    50__9/27/2011 16:57:36 PM:951
    51__9/27/2011 16:57:36 PM:954
    52__9/27/2011 16:57:36 PM:957
    53__9/27/2011 16:57:36 PM:960
    54__9/27/2011 16:57:36 PM:964
    55__9/27/2011 16:57:36 PM:967
    56__9/27/2011 16:57:36 PM:970
    57__9/27/2011 16:57:36 PM:973
    58__9/27/2011 16:57:36 PM:976
    59__9/27/2011 16:57:36 PM:979
    60__9/27/2011 16:57:36 PM:986
    61__9/27/2011 16:57:36 PM:989
    62__9/27/2011 16:57:36 PM:991
    63__9/27/2011 16:57:36 PM:994
    64__9/27/2011 16:57:36 PM:997
    65__9/27/2011 16:57:37 PM:0
    66__9/27/2011 16:57:37 PM:3
    67__9/27/2011 16:57:37 PM:5
    68__9/27/2011 16:57:37 PM:8
    69__9/27/2011 16:57:37 PM:11
    70__9/27/2011 16:57:37 PM:14
    71__9/27/2011 16:57:37 PM:17
    72__9/27/2011 16:57:37 PM:21
    73__9/27/2011 16:57:37 PM:24
    74__9/27/2011 16:57:37 PM:27
    75__9/27/2011 16:57:37 PM:30
    76__9/27/2011 16:57:37 PM:32
    77__9/27/2011 16:57:37 PM:35
    78__9/27/2011 16:57:37 PM:38
    79__9/27/2011 16:57:37 PM:41
    80__9/27/2011 16:57:37 PM:44
    81__9/27/2011 16:57:37 PM:47
    82__9/27/2011 16:57:37 PM:52
    83__9/27/2011 16:57:37 PM:55
    84__9/27/2011 16:57:37 PM:58
    85__9/27/2011 16:57:37 PM:61
    86__9/27/2011 16:57:37 PM:64
    87__9/27/2011 16:57:37 PM:67
    88__9/27/2011 16:57:37 PM:70
    89__9/27/2011 16:57:37 PM:73
    90__9/27/2011 16:57:37 PM:75
    91__9/27/2011 16:57:37 PM:78
    92__9/27/2011 16:57:37 PM:81
    93__9/27/2011 16:57:37 PM:84
    94__9/27/2011 16:57:37 PM:87
    95__9/27/2011 16:57:37 PM:91
    96__9/27/2011 16:57:37 PM:94
    97__9/27/2011 16:57:37 PM:97
    98__9/27/2011 16:57:37 PM:100
    99__9/27/2011 16:57:37 PM:103
    Press any key to continue . . .
      

  6.   

    不可能保证...因为非实时系统系统时钟是有精度限制的,PC Windows系统大约是15毫秒,也就是说在系统时钟的一个Tick内这个值是不变的...你这问题跟月经的Random重复值问题本质是一样的...
      

  7.   

    虽然无法保证精确的时间但是Sleep(1)能够确保等待的时间大于1毫秒
    也就是说他的MilliSecond是不会重复才对
      

  8.   

    你在想当然,精度只有15毫秒,你sleep1毫秒怎么可能...除非你的计算机被各种任务阻塞慢的不像话,稍微正常一点的计算机都不可能...
      

  9.   

    问题时Sleep的时候线程被挂起了照你这么说那线程至少15毫秒以后才能再得到执行机会事实显然不是这样
      

  10.   

    事实是sleep 1毫秒很可能系统时钟还没有走完一个Tick...你为什么不多测试几次呢...而且人家楼主一开始就说了...
      

  11.   

    你也是想当然,都是系统时钟怎么可能有差别...只有sleep超过系统时钟精度才行,否则就不能用系统时钟,只有CPU晶振才足够快...
      

  12.   

    事实上我的Thread.Sleep(1)是加在打印之前,,加在打印之后,就没有重复的了。。如Icedmilk打印的效果了。。
    请vrhero和Icedmilk告诉我哈呢
      

  13.   


    搞开发的经常会开发一种玩笑,对于一些自认为很牛的人,如果遇到了bug,会自嘲地说:“我是不人品不行,所以才出这种bug?”。肯到你的这个“设计”我也只好苦笑。你知道电脑运行有多快?你硬要连续运行两次 DateTime.Now 返回的毫秒数必须不一样,这是什么“研究”呢?想转而研究如何编写出100%保证低效率的程序的方法么?
      

  14.   

    既然一个tick都没走完,那就是系统认为时间没变,那线程怎么会继续计时不精确只会导致Sleep(1)消耗掉的时间大于1ms我在家里的机器又试了下,确实要比公司里的机器间隔小多了,不过依然没有重复
      

  15.   

    我的测试数据表明Sleep(1)会出现2-5不等的重复数据
      

  16.   

    static void Main(string[] args)
            {            for(int i =0;i<100;i++)
                {
                   
                    Console.WriteLine(System.Environment.TickCount.ToString());
                    
                }
    }