CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

timeGetTime/GetTickCount, 精确到四毫秒

楼主wanshi_53(幻相)2005-06-01 12:58:12 在 VC/MFC / 界面 提问

操作系统:win2000  
  工具:     vc6.0  
   
  ......  
  for   (;;)  
  {  
      start   =   timeGetTime();  
   
      while   ((end   =   timeGetTime()-start)<4)  
      {  
            if   (NULL!=PeekMessage(&msg,   NULL,   0,   0,   PM_REMOVE))  
            {  
                  TranslateMessage(&msg);  
                  DispatchMessage(&msg);            
            }  
      }  
      end   =   timeGetTime();  
      end   =   start   -   end;  
  }  
   
  我用多媒体时钟,限制这段程序的时间。逻辑上来讲应该是在end大于4的时候退出,但是我多次调试,start设置一个断点,   第二个end处设置一个断点。end最后的结果不是15就是16。  
   
  我想原因是不是系统问题呢?  
  下面这段是我摘录msdn上的  
  DWORD   GetTickCount(VOID)  
   
  Parameters  
  This   function   has   no   parameters.    
   
  Return   Values  
  The   return   value   is   the   number   of   milliseconds   that   have   elapsed   since   the   system   was   started.    
   
  Remarks  
  The   following   table   describes   the   resolution   of   the   system   timer.    
   
  System   Resolution    
  Windows   NT   3.5   and   later   The   system   timer   runs   at   approximately   10ms.    
  Windows   NT   3.1   The   system   timer   runs   at   approximately   16ms.    
  Windows   95   and   later   The   system   timer   runs   at   approximately   55ms.    
   
   
   
  我想精确到4毫秒。好像不行是吗? 问题点数:20、回复次数:4Top

1 楼dongfa(一桶江湖( http://www.codelive.net ))回复于 2005-06-01 13:02:54 得分 10

GetTickCount有问题.确实是低是在15   ms.  
   
  可以使用这个;  
  class   CTimeCounter  
  {  
  public:  
          CTimeCounter(int   nScaleSecond   =   1000)  
          {  
  m_nScaleSecond   =   nScaleSecond;  
  Begin();  
          }  
  void   Begin()  
  {  
                  QueryPerformanceFrequency(&m_nFreq);  
                  QueryPerformanceCounter(&m_nBeginTime);  
  }  
          __int64   End()  
          {  
  LARGE_INTEGER   nEndTime;  
  QueryPerformanceCounter(&nEndTime);  
  return   (__int64)(nEndTime.QuadPart   -   m_nBeginTime.QuadPart)*m_nScaleSecond/m_nFreq.QuadPart;  
          }  
  protected:  
  int   m_nScaleSecond;  
          LARGE_INTEGER   m_nFreq;  
          LARGE_INTEGER   m_nBeginTime;  
  };  
   
   
  CTimeCounter   tc;   //   或者CTimeCounter   tm(1000000);   精确到1/1000000秒  
  //   你的代码  
  __int64   nCount   =   tc.End();  
  tc.Begin();   //重新开始计数  
  ....  
   
  nCount   =   tc.End();  
   
   
   
  Top

2 楼wanshi_53(幻相)回复于 2005-06-01 13:05:46 得分 0

谢谢楼上的,这么快。第一次来这里就碰到这么热心的人  
  哈哈:)罗嗦了  
  谢谢啊!  
  我待会试试啊!Top

3 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-06-01 13:18:59 得分 10

精度0.001微秒  
  DWORD   st,et;//起始时间,终止时间  
  _asm{  
  RDTSC  
  mov   st,eax  
  }  
  <..你的代码..>  
  _asm{  
  RDTSC  
  mov   et,eax  
  }  
   
  Top

4 楼wanshi_53(幻相)回复于 2005-06-01 13:20:43 得分 0

楼上的可以具体讲一下吗?Top

相关问题

  • FormatDateTime('YYYYMMDDHHMMSS',Now)这么精确到毫秒?
  • 如何在UNIX下用C实现精确到毫秒计时?
  • 急急急!!如何把时间精确到毫秒
  • WINDOWS下如何精确时间到毫秒级
  • ASP如何取得精确到毫秒的当前时间?
  • 如何取到服务器的时间?精确到毫秒
  • 如何记录精确到1毫秒的时间差?
  • 获取的系统时间,如何精确到毫秒?
  • 计算时间怎样精确到毫秒?
  • vb.net时间间隔问题(精确到毫秒)

关键词

  • start
  • timegettime

得分解答快速导航

  • 帖主:wanshi_53
  • dongfa
  • vcmute

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo