+ -
当前位置:首页 → 问答吧 → 关于QueryPerformanceCounter与时间片

关于QueryPerformanceCounter与时间片

时间:2011-10-14

来源:互联网

看到一些帖子,介绍QueryPerformanceCounter可以精确计时到1微秒。
而操作系统给一个线程分配的时间片是20-50毫秒。
设线程a在先获得时间T1 ,执行某任务时,被系统切换了,
再次获得时间片,完成任务,取得时间T2,
用时t=T2-T1,其中实际上还有被系统切换流失的时间。
是否可以说,用时t并不能反映执行任务真正需要的时间?



  LARGE_INTEGER litmp;  
  LONGLONG QPart1,QPart2; 
  double dfMinus, dfFreq, dfTim;  
  QueryPerformanceFrequency(&litmp); 
  dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率 
  QueryPerformanceCounter(&litmp); 
  QPart1 = litmp.QuadPart;// 获得初始值 

  //这里执行某任务..... 

  QueryPerformanceCounter(&litmp); 
  QPart2 = litmp.QuadPart;//获得中止值 
  dfMinus = (double)(QPart2-QPart1); 
  dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒 
 

作者: hztj2005   发布时间: 2011-10-14

我觉得这要看你如何理解 反映执行任务真正需要的时间了?
我个人觉得包括切换的时间比较合理吧。
好像做公交,从A到C,时间不单单包括公交跑动的时间,还包括堵车的时间。

作者: hongkun18   发布时间: 2011-10-17

顶起来,看看大家的意见。

作者: hztj2005   发布时间: 2011-12-13

对的,Windows不是实时系统,不能那样计算较长的时间,不精确

作者: yayafu   发布时间: 2011-12-13

只不过是一种衡量,当所有都用这个来统计就可以得到一个相对的分配以及他们的长短

作者: oyljerry   发布时间: 2011-12-13