怎么获得当前时间的毫秒,微秒数?!

解决方案 »

  1.   

    windows下:ftime  微妙
    unix下有更精确的 gettimeofday() 纳秒  ftime()微妙
      

  2.   

    提醒你: 在i386机器上 无法取得精确道毫秒的时间!
    cpu 多任务调度 时间片就20ms  即使用用取时钟计数器的办法(gettimeday())
    也无法保证CPU 是否跳动!
      

  3.   

    GetSystemTime(SystemStruct ptime)
    ?=lpSystemStruct.millons 
    用它吧没错,查一下msdn 中GetSystemTime()函数吧,ptime就是你的东东
      

  4.   

    楼上再开玩笑。 常用函数只能处理到55毫秒,因为每秒中断18次。
    我两年前用过,使用系统的多媒体时钟,可以精确到840ns!
    函数名忘了 Get..Frequency..  sorry
      

  5.   

    各位不知道试过没有
     GetSystemTime()的毫秒根本就是假的! 连续取1000次时间!! 看看
    问题就出来了! 最少都是10ms跳动! 
    楼上说的办法(取时钟计数器) 是最精确的了  不过还是有问题! 
    你在连续测试1000000 或者更多! 中间还是有跳动的!! 这是cpu跳动没办法!
     
    下面程序比较 可以看看:
    #include <windows.h>
    #include <stdio.h>
    #include <mmSystem.h>
    #pragma comment(lib, "Winmm.lib" )
    class CHiResDateTime {
    public:
       CHiResDateTime() {
        m_nTickTimeMark= timeGetTime(); // multimedia timer running with at 1ms ticks
        GetSystemTimeAsFileTime( (LPFILETIME)&m_n64TimeMark );
       }
       SYSTEMTIME* Now( SYSTEMTIME* prST= 0) {
           DWORD nTick= timeGetTime() - m_nTickTimeMark;
           LONGLONG n64Cur= m_n64TimeMark + (nTick * 10000); // cvt to 100-ns units
           FileTimeToSystemTime( (LPFILETIME)&n64Cur, &m_rST );
           if (prST != 0) *prST= m_rST;
           return( &m_rST );
       };
    private:
       DWORD      m_nTickTimeMark;  // ms internvals  (*10,000 = 100ns intervals)
       LONGLONG   m_n64TimeMark;    // 100 ns intervals
       SYSTEMTIME m_rST;
    };
    void main()
    {
       CHiResDateTime t;
       SYSTEMTIME rST, rST2;
       for (int j=0; j< 20000; j++ ) {
          t.Now( &rST );  
           GetSystemTime( &rST2 );
           printf("HiRes: %02d:%02d:%02d.%03d  ",rST.wHour,rST.wMinute,rST.wSecond,rST.wMilliseconds );
           printf("  Std: %02d:%02d:%02d.%03d\n",rST2.wHour,rST2.wMinute,rST2.wSecond,rST2.wMilliseconds 
    );
       }
       // alternate usage:
       printf("  This year is: %d\n", t.Now()->wYear );
       printf("  This hour is: %d\n", t.Now()->wHour );
    }
    =-=-=-=-=-=-=- Output:
    HiRes: 01:48:40.930    Std: 01:48:40.930
    HiRes: 01:48:40.931    Std: 01:48:40.930
    HiRes: 01:48:40.934    Std: 01:48:40.930
    ...
    HiRes: 01:48:40.935    Std: 01:48:40.930
    ...
    HiRes: 01:48:40.940    Std: 01:48:40.930
    HiRes: 01:48:40.941    Std: 01:48:40.930
    HiRes: 01:48:40.942    Std: 01:48:40.930
    ...
    HiRes: 01:48:40.978    Std: 01:48:40.930
    HiRes: 01:48:40.979    Std: 01:48:40.990
    ...
    HiRes: 01:48:40.983    Std: 01:48:40.990
    ...
    HiRes: 01:48:40.999    Std: 01:48:40.990
    HiRes: 01:48:41.000    Std: 01:48:40.990
    HiRes: 01:48:41.003    Std: 01:48:40.990
    ...
    HiRes: 01:48:41.036    Std: 01:48:40.990
    HiRes: 01:48:41.036    Std: 01:48:41.040
    HiRes: 01:48:41.042    Std: 01:48:41.040
    ...
    HiRes: 01:48:41.089    Std: 01:48:41.040
    HiRes: 01:48:41.090    Std: 01:48:41.100
    ...
    ...
    HiRes: 01:48:41.099    Std: 01:48:41.100
    HiRes: 01:48:41.102    Std: 01:48:41.100
    HiRes: 01:48:41.102    Std: 01:48:41.100