首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microtime总是返回相同的值多次?

Microtime总是返回相同的值多次?
EN

Stack Overflow用户
提问于 2013-06-16 09:13:06
回答 3查看 1.4K关注 0票数 2

因此,我创建了一个文件microtime.php,并在运行nginx专用服务器的Windows Server 2008 R2 64x Enterprises上对其进行了测试。

代码语言:javascript
复制
<?php 
for ( $i = 0; $i <= 5; $i++ ) {
 echo time() . '<br />';
 echo microtime() . '<br />';
 echo '<br />';
}
?>

我得到了这个:

代码语言:javascript
复制
1371343916
0.52320400 1371343916

1371343916
0.52320400 1371343916

1371343916
0.52320400 1371343916

1371343916
0.52320400 1371343916

1371343916
0.52320400 1371343916

1371343916
0.52320400 1371343916

为什么结果是相同的,以及如何修复?

相反,我应该得到这样的东西:

代码语言:javascript
复制
1371345446
0.61877300 1371345446

1371345446
0.61878200 1371345446

1371345446
0.61878500 1371345446

1371345446
0.61878700 1371345446

1371345446
0.61878900 1371345446

1371345446
0.61879100 1371345446

致以亲切的问候。

EN

回答 3

Stack Overflow用户

发布于 2015-03-10 18:11:23

简而言之:微时间中的值的重复与微时间的更新频率有关。您在每次更新之间多次请求一个值。以前也有人问过相关的问题。How precise is the internal clock of a modern PC?对我理解为什么会这样很有用。另外,搜索"HPET“和"precision timers”。

更高的准确性:您可以通过将微时间分解为微秒和秒数,然后将每个时间乘以10^8 (比方说),然后再将它们相加,从而获得更准确的结果。将其转换为字符串并回显将在“秒十进制”的右侧显示更多数字。旁白:我称它为八秒,因为有趣的是,没有英语单词来表示它。

下面是一些代码来证明这一点:

代码语言:javascript
复制
    echo 'MICROTIME: '.microtime()." ";
    list($microseconds,$seconds) = explode(' ',microtime());
    $precisedatetimestamp = number_format((($seconds * 100000000)  + ($microseconds * 100000000)),"0","","");
    settype($precisedatetimestamp,'string');
    echo ' ..RETURNED : '.number_format($precisedatetimestamp,0,"","").'<br />';

循环几千次,看看结果。即使有了这样的准确度,你也不能防止重复,这只意味着更少的重复。处理器速度很快(而且越来越快),每秒可以执行大量指令。这是关于你的目的所需的准确度的问题。它只能与内部时钟的更新频率一样准确。

票数 1
EN

Stack Overflow用户

发布于 2013-06-19 03:22:02

在Mac OSX Lion上,当我运行你的代码时,我得到:

代码语言:javascript
复制
1371583001
0.01606600 1371583001

1371583001
0.01609400 1371583001

1371583001
0.01610400 1371583001

1371583001
0.01611200 1371583001

1371583001
0.01612100 1371583001

1371583001
0.01612900 1371583001

因此,看起来您需要运行更多的迭代才能在Windows中更改结果。

票数 0
EN

Stack Overflow用户

发布于 2018-12-30 03:36:16

记录在案的是7.2+ windows (但我也在其他机器上测试了相同的结果)。

代码语言:javascript
复制
<?php
for ( $i = 0; $i <= 1000; $i++ ) {
    $k1=microtime();
    usleep(1);
    $k2=microtime();
    if($k1==$k2) echo "error k1 and k2<br>";
}
?>

它没有复制功能。

显然,usleep会强制从系统重新加载正确的时间。

编辑: time_nanosleep(0,1);也可以工作(它休眠一纳秒)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17129336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档