关于QueryPerformanceCounter与时间片

hztj2005 2011-10-14 07:16:54
看到一些帖子,介绍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;// 获得对应的时间值,单位为秒
...全文
159 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztj2005 2012-01-19
  • 打赏
  • 举报
回复
英文关于高精度计时的帖子:
http://www.masm32.com/board/index.php?topic=3045.0
yuucyf 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oyljerry 的回复:]
只不过是一种衡量,当所有都用这个来统计就可以得到一个相对的分配以及他们的长短
[/Quote]
如果想真正的知道该线程使用的真正的CPU时间,那你必须对它的容器进程施加限制,可以把该线程所在的进程放到作业中,然后调用QueryInformationJobObject来获取真实的使用CPU时间.在两次之间调用改函数应该即可得到真正的CPU时间,楼主可以把得到的结果跟QueryPerformanceCounter得到结果进行比较看看.
oyljerry 2011-12-13
  • 打赏
  • 举报
回复
只不过是一种衡量,当所有都用这个来统计就可以得到一个相对的分配以及他们的长短
yayafu 2011-12-13
  • 打赏
  • 举报
回复
对的,Windows不是实时系统,不能那样计算较长的时间,不精确
hztj2005 2011-12-13
  • 打赏
  • 举报
回复
顶起来,看看大家的意见。
hongkun18 2011-10-17
  • 打赏
  • 举报
回复
我觉得这要看你如何理解 反映执行任务真正需要的时间了?
我个人觉得包括切换的时间比较合理吧。
好像做公交,从A到C,时间不单单包括公交跑动的时间,还包括堵车的时间。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧