《C标准库》里实现的clock应该错了吧?

六道佩恩 2018-09-17 05:16:14

clock函数返回的是毫秒,time函数返回的是秒,这明显有问题吧
...全文
1365 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckc 2018-09-25
  • 打赏
  • 举报
回复
引用 15 楼 weixin_39158150 的回复:
老哥,这个只是功能介绍,没有实现的代码啊。它完全可以用各种方式实现比如winapi,它也没说是用time函数的返回值乘以一个值来得出的呀(个人怎么想都觉得秒*数的方式实现不了)
要搞清楚因果关系。并不是clock返回秒乘以一个数,而是计算机计时的时候是按clock计数,返回的秒实际上是clock除以一个频率。 以前dos下用18.2就是因为早期的pc机有个18.2Hz的硬件时钟, 计算机好像有个硬件中断就是以这个频率在一直计数,clock在这个机器上实际就是读取这个计数器的数据,计算机计时需要对这个计数进行除18.2的处理,就是说每有18.2个脉冲过来秒数加1。 后来的计算机速度提高,计时的精度也提高了,所以clock也就被调高了吧
六道佩恩 2018-09-20
  • 打赏
  • 举报
回复
引用 13 楼 Slzde_sub 的回复:
[quote=引用 12 楼 weixin_39158150 的回复:]
[quote=引用 11 楼 Slzde_sub 的回复:]



没必要扯这么多

去msdn上看看函数定义 函数返回值 函数说明 函数示例


那里是最标准的


请问在msdn里怎么找在里面迷路了都[/quote]


https://msdn.microsoft.com/zh-cn/library/4e2ess30.aspx


有能力尽量看英文原版[/quote]

老哥,这个只是功能介绍,没有实现的代码啊。它完全可以用各种方式实现比如winapi,它也没说是用time函数的返回值乘以一个值来得出的呀(个人怎么想都觉得秒*数的方式实现不了)
六道佩恩 2018-09-20
  • 打赏
  • 举报
回复
引用 11 楼 Slzde_sub 的回复:



没必要扯这么多

去msdn上看看函数定义 函数返回值 函数说明 函数示例


那里是最标准的


请问在msdn里怎么找在里面迷路了都
ckc 2018-09-19
  • 打赏
  • 举报
回复
CLOCKS_PER_SEC依赖于操作系统以及编译器,也就是说不同的环境下可能是不一样的 当然你如果确定自己只用某一个具体的环境,那就可以把它当成一个固定的值 如果想规范,就需要处理CLOCKS_PER_SEC
棉猴 2018-09-18
  • 打赏
  • 举报
回复
你的这个clock()函数算的是从1900年到现在的时间吧?
正如楼上所说,clock()函数返回的并不是毫秒。MSDN上的解释是
The elapsed time since the CRT initialization at the start of the process, measured in CLOCKS_PER_SEC units per second.
clock()函数返回的是进程开始时CRT初始化所消耗的时间,以每秒的 CLOCKS_PER_SEC 来测量。
也就是说,clock()函数返回值是秒× CLOCKS_PER_SEC 。CLOCKS_PER_SEC并不是一个固定值。
ckc 2018-09-18
  • 打赏
  • 举报
回复
clock返回的是启动的秒数乘以CLOCKS_PER_SEC CLOCKS_PER_SEC依赖于操作系统以及编译器,并没有规定死是多少 vc6定义的是1000,这样clock返回就是毫秒 linux下定义的是1000000,对应clock是微秒 以前的dos下tubro c2.0定义CLOCKS_PER_SEC是18.2 以上这些都是可以的,并没有违规 所以你这书上直接返回秒也是可以的,这时候CLOCKS_PER_SEC=1
六道佩恩 2018-09-18
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

赵老师,您这段话怕是写在桌面随时复制粘贴吧?
六道佩恩 2018-09-18
  • 打赏
  • 举报
回复
引用 4 楼 hou09tian 的回复:
你的这个clock()函数算的是从1900年到现在的时间吧?
正如楼上所说,clock()函数返回的并不是毫秒。MSDN上的解释是
The elapsed time since the CRT initialization at the start of the process, measured in CLOCKS_PER_SEC units per second.
clock()函数返回的是进程开始时CRT初始化所消耗的时间,以每秒的 CLOCKS_PER_SEC 来测量。
也就是说,clock()函数返回值是秒× CLOCKS_PER_SEC 。CLOCKS_PER_SEC并不是一个固定值。


这样相乘很怪吧,乘起来都是整千整千的,实际使用起来不是这样的啊,实际真的能精确到毫秒啊。
六道佩恩 2018-09-18
  • 打赏
  • 举报
回复
引用 3 楼 ckc 的回复:
clock返回的是启动的秒数乘以CLOCKS_PER_SEC
CLOCKS_PER_SEC依赖于操作系统以及编译器,并没有规定死是多少
vc6定义的是1000,这样clock返回就是毫秒
linux下定义的是1000000,对应clock是微秒
以前的dos下tubro c2.0定义CLOCKS_PER_SEC是18.2
以上这些都是可以的,并没有违规
所以你这书上直接返回秒也是可以的,这时候CLOCKS_PER_SEC=1
这样相乘很怪吧,乘起来都是整千整千的,实际使用起来不是这样的啊,实际真的能精确到毫秒啊。
帅得不敢出门 2018-09-18
  • 打赏
  • 举报
回复
RETURN VALUE
The value returned is the CPU time used so far as a clock_t; to get the number of seconds used, divide by CLOCKS_PER_SEC. If the processor time used is not available or its
value cannot be represented, the function returns the value (clock_t) -1.

没毛病。
赵4老师 2018-09-17
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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