GetTickCount()的问题,结果为什么总是0?

brgd_mh 2011-06-17 10:12:03
DWORD dwInterval=0;
QuickSort qs;
DWORD dwStart=GetTickCount();
qs.QSort(array,n);
dwInterval=GetTickCount()-dwStart;
cout<<"普通快速排序算法的已排序序列为:"<<endl;
for(i=0;i<n;i++)
cout<<array[i]<<" ";
cout<<endl<<"普通快速排序算法的执行时间为:"<<dwInterval<<endl;

dwStart=GetTickCount();
qs.AdvancedQSort(array,n);
dwInterval=GetTickCount()-dwStart;
cout<<"改进后快速排序算法的已排序序列为:"<<endl;
for(i=0;i<n;i++)
cout<<array[i]<<" ";
cout<<endl<<"改进后快速排序算法的执行时间为:"<<dwInterval<<endl;

上面是我写的一段程序,结果时间总是0,即使排序元素个数为10000或100000都一样,请高手帮忙,谢谢!
...全文
720 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-06-20
  • 打赏
  • 举报
回复
改为统计执行10000000次的时间好不啦。
xspace_time 2011-06-19
  • 打赏
  • 举报
回复
一般来说for循环10万次足有30万个指令周期时间,加入CPU主频为2.8GHz,4核并行,执行30万次则大约花费
428.57us,不到1ms的1/2
vcf_reader 2011-06-19
  • 打赏
  • 举报
回复
dwStart=GetTickCount();
qs.AdvancedQSort(array,n);
dwInterval=GetTickCount()-dwStart;


结果为0,说明中间那句执行很快,不到1ms
CloudNeil 2011-06-18
  • 打赏
  • 举报
回复
GetTickcount的精度在16ms左右。。。要精确就用RTDSC。。。
JoeBlackzqq 2011-06-18
  • 打赏
  • 举报
回复
可以测试下,是不是因为执行得太快了。
你可以在中间加上输出很多字符串的语句,这样就可以延长程序执行的时间了,再看下结果是不是还是0。

如:
for(int i = 0; i < 500; i++)
cout<<"The string is "<<i<<endl;
就想叫yoko 2011-06-18
  • 打赏
  • 举报
回复
执行得太快了~
Gloveing 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zjs100901 的回复:]

GetTickcount的分辨率为15毫秒左右,也就是说对于15毫秒之内执行完了的程序,它都返回相同的值,你觉得我说得对吗?
n再设大100或1000倍,现在的CPU很牛叉了。
[/Quote]
学习咯
zjs100901 2011-06-18
  • 打赏
  • 举报
回复
GetTickcount的分辨率为15毫秒左右,也就是说对于15毫秒之内执行完了的程序,它都返回相同的值,你觉得我说得对吗?
n再设大100或1000倍,现在的CPU很牛叉了。
lazy_2010 2011-06-18
  • 打赏
  • 举报
回复
说明快速排序的时间花的太少,试一试把需要排序的数组大小变大呢
QQ515311445 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 aprial 的回复:]

你的排序程序执行时间小于1毫秒,不管1000次还是10000次,代码所花的时间少于GetTickcount函数的精度。
[/Quote]
时间不够千分之一秒,所以是0
aprial2013 2011-06-18
  • 打赏
  • 举报
回复
你的排序程序执行时间小于1毫秒,不管1000次还是10000次,代码所花的时间少于GetTickcount函数的精度。
xspace_time 2011-06-18
  • 打赏
  • 举报
回复
GetTickcount函数:它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWORD GetTickCount(void),返回值以32位的双字类型DWORD存储,因此可以存储的最大值是2-1 ms约为49.71天,因此若系统运行时间超过49.71天时,这个数就会归0,MSDN中也明确的提到了:"Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days."。因此,如果是编写服务器端程序,此处一定要万分注意,避免引起意外的状况。
pangzi8 2011-06-18
  • 打赏
  • 举报
回复
应该是这个问题,DWORD dwStart应该做成静态数据,即static DWORD dwStart 你可以试试
天外来客-007 2011-06-17
  • 打赏
  • 举报
回复
GetTickcount函数:它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间。
一般情况下应该是可以得到正确的值的,仔细检查一下你的程序吧!
c_losed 2011-06-17
  • 打赏
  • 举报
回复
for(i=0;i<n;i++) // n太小
还没想好 2011-06-17
  • 打赏
  • 举报
回复
那就是你中间的间隔确实短吧,强加个Sleep试试看
brgd_mh 2011-06-17
  • 打赏
  • 举报
回复
不行,还是0
ryfdizuo 2011-06-17
  • 打赏
  • 举报
回复
clock_t begin = clock();
// 函数、、、
clock_t end = clock();
begin - end; 试试。。。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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